我在here关注CNN的一个例子。 以下是我准备CNN模型的代码:
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(100, 100, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(7)) # 7 outputs for 7 classes which are 1, 2, 3, ..., 7
这就是我训练模型的方法:
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
history = model.fit(trainGenerator, epochs=10,
validation_data=validationGenerator)
当trainGenerator
有80个图像时&validationGenerator
有20个图像,对于{loss
如下图所示,来自一个时代
Epoch 1/10
3/3 [==============================] - 1s 736ms/step - loss: 1.8475 - accuracy: 0.2500 - val_loss: 2.4287 - val_accuracy: 0.5500
当trainGenerator
获得9817张图像时&validationGenerator
获得了2454张图像val_loss
&loss
变成NaN
Epoch 1/10
307/307 [==============================] - 20s 63ms/step - loss: nan - accuracy: 0.0090 - val_loss: nan - val_accuracy: 0.0000e+00
以trainGenerator
为单位的批大小&validationGenertor
在上述两种情况下都是32(默认值)
当我将图像导入trainGenerator
时,我已重新缩放了图像&validationGenertor
使用
trainDataGen=ImageDataGenerator(
rescale=1./255,
validation_split=0.2
)
之后,我使用flow_from_dataframe
创建trainGenerator
,如下所示:
trainGenerator = trainDataGen.flow_from_dataframe(
dataframe=train_df,
directory=trainingFilepath,
x_col="filename",
y_col="label",
target_size=(100,100),
class_mode="raw",
subset="training"
)
validationGenerator
是使用上面的代码通过将子集替换为validation
创建的
类似的question也被问及,但它不适用于我的情况,因为当列车图像数量增加时,问题仍然存在&;我使用sparce_categorical_crossentropy
val_accuracy
是0吗李>
我要做的是使用分类交叉熵。在生成器中,将class_模式更改为“分类”。在model.compile中,使损失class='classifical\u交叉熵。不确定这是否能解决问题,但不会造成伤害。可能是当你使用更多的图片时,可能有一些Na 标签。检查您的datafame是否有Na
相关问题 更多 >
编程相关推荐