tensorflow多标签分类-无法压缩dim [1],预期尺寸为1,'度量/精度/压缩'为5,

问题描述 投票:0回答:1

我正在尝试创建多标签分类器,但遇到了问题。我有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]。

这是什么意思,我该如何解决?

python tensorflow machine-learning conv-neural-network multilabel-classification
1个回答
0
投票

从外观上看,我使用了错误的损失函数,因为我应该一直使用Binary_crossentropy而不是sparse_categorical_crossentropy;使用此工具时,训练过程开始。

© www.soinside.com 2019 - 2024. All rights reserved.