【发布时间】:2018-03-18 07:52:20
【问题描述】:
我正在使用带有 Tensorflow 后端的 Keras 来训练一个修改后的 Resnet-50,它将对象分为 15 个类别。我正在使用 Adam 优化器,我尝试了 0.001 和 0.01 的学习率,但得到了相似的结果。
我面临的问题是损失和准确性都表现出相似的行为(在训练和验证数据集中)。它们都在相似的时间上升或下降,我希望随着损失的下降而获得更高的准确度。什么可能导致这种行为?
编辑: 模型代码如下:
#Model creation:
def create_model(possible_labels):
rn50 = ResNet50(include_top=True, weights=None)
layer_name = rn50.layers[-2].name
model = Model(rn50.input,
Dense(len(possible_labels))(rn50.get_layer(layer_name).output))
adam = Adam(lr=0.0001)
model.compile(loss='categorical_crossentropy',
optimizer=adam, metrics=['accuracy'])
checkpointer = ModelCheckpoint(filepath='the_best_you_ever_had',
verbose=1, save_best_only=True)
tensorboard = TensorBoard()
return model, [checkpointer, tensorboard]
model, checkpointers = create_model(labels)
#Dataset generation:
train_datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
vertical_flip=True,
channel_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2
)
val_datagen = ImageDataGenerator()
train_generator = train_datagen.flow_from_directory(
'data\\train',
target_size=(224, 224),
batch_size=32,
class_mode='categorical'
)
val_generator = val_datagen.flow_from_directory(
'data\\validation',
target_size=(224, 224),
batch_size=32,
class_mode='categorical'
)
#Model training:
model.fit_generator(
train_generator,
steps_per_epoch=5000,
epochs=50,
validation_data=val_generator,
callbacks=checkpointers
)
【问题讨论】:
-
能否也分享一下您的代码?
-
这似乎只是 1 个 epoch 的空间......你确定它不是 bug、infinity 或 nan 出现在某个地方吗?
-
检查了矩阵中可能的除以零、全零行(可能由 relu 引起)、负根和其他数学错误?
-
代码中具体是什么?模型创建和编译?这些图有 50 个 epoch,x 轴是 epoch。问题在于图像分类,所以我认为输入中没有全零或零除法。
-
原因是代码中的一个错误,假设在这种情况下丢失单词的典型含义,当它是0 - 准确度是100,因为这两个数字不匹配它意味着你的实现是错误的(因为它不是问题的一部分,我们无法提供任何其他见解)。
标签: python tensorflow machine-learning deep-learning keras