Machine learning 当改变输出层(Keras)的形状时,Keras模型未正确训练

Machine learning 当改变输出层(Keras)的形状时,Keras模型未正确训练,machine-learning,keras,cnn,Machine Learning,Keras,Cnn,我想预测图像的类别。 这些类存储在标签数组中:数组[0,0,1.,…,2,2,0.],dtype=float32 我有3门课,0、1和2 我的模型如下所示: model = Sequential([ Conv2D(16, 3, padding='same', activation='relu', input_shape=(64, 64 ,3)), MaxPooling2D(), Dropout(0.5), Conv2D(32, 3, padding='same', activat

我想预测图像的类别。 这些类存储在标签数组中:数组[0,0,1.,…,2,2,0.],dtype=float32 我有3门课,0、1和2

我的模型如下所示:

model = Sequential([
Conv2D(16, 3, padding='same', activation='relu', 
       input_shape=(64, 64 ,3)),
MaxPooling2D(),
Dropout(0.5),
Conv2D(32, 3, padding='same', activation='relu'),
MaxPooling2D(),
Conv2D(64, 3, padding='same', activation='relu'),
MaxPooling2D(),
Dropout(0.5),
Flatten(),
Dense(512, activation='relu'),
Dense(256),
Dense(3, activation = 'relu')
])
当我在最后一个密集层中使用3的形状时,在训练过程中,损失和精度根本不会改变。 当我将最后一个致密层的形状增加到5时,训练效果良好。 为什么它不适用于三的形状?毕竟我有三节课

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['sparse_categorical_accuracy'])

history = model.fit(train_images, train_labels,
                    epochs=num_epochs,
                    validation_data=(val_images, val_labels),
                    callbacks = [tensorboard])

我还测试了一个sgd优化器,得到了相同的结果

您似乎在进行多类分类,但您正在使用relu作为输出层激活函数。对于多类分类,应在最后一层中使用softmax,并使该层中的神经元数量与要分类的类数量相等

ReLU不生成logits,您应该在输出时使用线性激活,而不是ReLUHello,谢谢您的回答。我将最后一层更改为:Dense3,activation='softmax',但在训练期间损失和准确度仍然不会改变。@zyros这是因为softmax与分类熵损失密切相关,而不是您在这里使用的稀疏版本。非常感谢。最后一层使用softmax激活和分类_交叉熵解决了我的问题problem@zyros哎呀,我没注意到你的损失函数。我很高兴它现在运行良好!