【问题标题】:Tensorflow: Loss and Accuracy curves showing similar behaviorTensorflow:显示类似行为的损失和准确度曲线
【发布时间】:2018-03-18 07:52:20
【问题描述】:

我正在使用带有 Tensorflow 后端的 Keras 来训练一个修改后的 Resnet-50,它将对象分为 15 个类别。我正在使用 Adam 优化器,我尝试了 0.001 和 0.01 的学习率,但得到了相似的结果。

我面临的问题是损失和准确性都表现出相似的行为(在训练和验证数据集中)。它们都在相似的时间上升或下降,我希望随着损失的下降而获得更高的准确度。什么可能导致这种行为?

这是我上次运行的一些 Tensorboard 曲线:

编辑: 模型代码如下:

#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


【解决方案1】:

我在我的代码中发现了错误,事实上我只是在添加的最后一层中使用了默认(线性)激活。我通过在代码中执行此操作将其切换为 softmax 激活(因为它是分类而不是回归问题):

model = Model(rn50.input, 
        Dense(len(possible_labels), activation='softmax')
        (rn50.get_layer(layer_name).output))

然后曲线开始按预期运行,我达到了 96% 的准确度。

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2019-03-07
    • 2018-05-28
    相关资源
    最近更新 更多