Keras 损失:0.0000e+00 并且准确度保持不变

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

我有 101 个文件夹,从 0-100 包含合成训练图像。 这是我的代码:

dataset = tf.keras.utils.image_dataset_from_directory(
'Pictures/synthdataset5', labels='inferred', label_mode='int', class_names=None, color_mode='rgb', batch_size=32, image_size=(128,128), shuffle=True, seed=None, validation_split=None, subset=None,interpolation='bilinear', follow_links=False,crop_to_aspect_ratio=False
)

from keras.models import Sequential
from keras.layers import Dense, Conv2D, Flatten

model = Sequential()

model.add(Conv2D(32, kernel_size=5, activation='relu', input_shape=(128,128,3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, kernel_size=5, activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, kernel_size=3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(256, kernel_size=3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

model.fit(dataset,epochs=75)

我在每个时期总是得到相同的结果:

Epoch 1/75
469/469 [==============================] - 632s 1s/step - loss: 0.0000e+00 - accuracy: 0.0098

怎么了???

python tensorflow machine-learning keras deep-learning
2个回答
1
投票

事实证明,你的损失可能才是问题所在。 如果您使用 SparseCategoricalCrossentropy 作为损失,它应该可以工作。

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

在此之后,您应该将最后一层调整为:

model.add(Dense(101, activation='softmax'))

也不要忘记导入

import tensorflow as tf
让我知道这是否解决了问题。


0
投票

我遇到了类似的问题,并通过将损失函数更改为loss =“binary_crossentropy”(而不是categorical_crossentropy)来修复它。我认为这同样适用于这个问题,因为在这两种情况下输出层都是单个节点。

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