我正在尝试创建多标签分类器,但遇到了问题。我有5个班级,并且在尝试训练网络时陷入困境,对于机器学习来说我是一个相对较新的人,这是我建立的第一个多标签分类器。
我的代码:
def createModel(learn, act):
model = models.Sequential()
model.add(layers.Conv2D(32, (9,9), activation=act, input_shape=(512,512,1)))
model.add(layers.AveragePooling2D((2,2)))
model.add(layers.Conv2D(64, (9, 9), activation=act))
model.add(layers.AveragePooling2D((2,2)))
model.add(layers.Conv2D(64, (6, 6), activation=act))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(96, (6, 6), activation=act))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(128, (3, 3), activation=act))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(128, (3, 3), activation=act))
model.add(layers.Flatten())
model.add(layers.Dense(128, activation=act))
model.add(layers.Dense(5, activation='sigmoid'))
model.compile(optimizer=optimizers.Adam(learning_rate=learn), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
return model
model = createModel(0.005, 'tanh')
History = model.fit(Xtrain, ytrain, epochs=300, validation_data=(Xtest, ytest), verbose=0)
由于我的数据集格式很怪异,所以我利用了自己的分割函数,因此我必须使用预先存在的数据创建自己的标签。产生像s0这样的标签:[0。 1. 1. 0. 0.],[0。 0. 0. 0. 1.],[0。 1. 0. 0. 0。]
但是当我开始训练网络时,会发生以下错误:> ValueError:无法压缩dim [1],预期尺寸为1,对于“ metrics / accuracy / Squeeze”(操作数:“ Squeeze”)为5输入形状:[?, 5]。
这是什么意思,我该如何解决?
从外观上看,我使用了错误的损失函数,因为我应该一直使用Binary_crossentropy而不是sparse_categorical_crossentropy;使用此工具时,训练过程开始。