我正在设计一个分类器,它在输入端接收10个值的信号(通过处理MNIST数据集的像素获得,归一化为0-1),并输出数字的类别。这10个值的信号对每个数字都是独一无二的,因此可以进行分类。
num_classes=10y_train=to_categorical(y_train,num_classes)y_test=to_categorical(y_test,num_classes)x_train=(60000,10,1,1)y_train=(60000,10)x_test=(10000,10,1,1)y_test=(10000,10)
代码如下所示:
input_img = Input(shape=(10,1,1))x = Flatten()(input_img)x = Dense(100, activation='relu')(x)x = Dense(100, activation='relu')(x)decoded = Dense(10, activation='softmax')(x)autoencoder=Model(input_img,decoded)autoencoder.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])history=autoencoder.fit(x_train, y_train, epochs=30, batch_size=32, verbose=1, shuffle=True, validation_data=(x_test, y_test))
请建议可以做哪些更改。
回答:
我认为您应该使用tf.keras.losses.CategoricalCrossentropy
损失函数,因为您使用to_categorical
将目标编码为独热向量。根据文档:
当有两个或更多标签类别时,请使用此交叉熵损失函数。我们期望标签以独热表示形式提供。如果您想提供整数形式的标签,请使用
SparseCategoricalCrossentropy
损失函数。
然而,在我看来,如果没有可复制的代码,要给出具体的答案是非常有挑战性的。