【问题标题】:Validation loss and loss stuck at 0验证损失和损失停留在 0
【发布时间】:2021-10-28 21:50:47
【问题描述】:

我正在尝试用两个标签来训练一个分类问题进行预测。由于某种原因,我的validation_loss和我的损失在训练时总是卡在0。可能是什么原因?调用损失函数时有什么问题吗?它们是否适合多标签分类?

  X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=12, shuffle=True)
  X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.25, random_state=12, shuffle=True)

  model = keras.Sequential([
        #keras.layers.Flatten(batch_input_shape=(None,24)),
        keras.layers.Dense(first_neurona, activation='relu'),
        keras.layers.Dense(second_neurona, activation='relu'),
        keras.layers.Dense(third_neurona, activation='relu'),
        keras.layers.Dense(fourth_neurona, activation='relu'),
        keras.layers.BatchNormalization(), #WE NORMALIZE THE INPUT DATA 
        keras.layers.Dropout(0.25),
        keras.layers.Dense(2, activation='softmax'),
        #keras.layers.BatchNormalization() #for multi-class problems we use softmax? 2 clases: Forehand or backhand 
    ])

  model.compile(optimizer=keras.optimizers.Adam(learning_rate=lr),
                loss='categorical_crossentropy',
                metrics=['accuracy'])


  history=model.fit(X_train, y_train, epochs=n_epochs, batch_size=batchSize, validation_data=(X_val, y_val))
  test_loss, test_acc = model.evaluate(X_test, y_test)

编辑: 查看我的训练数据的形状:

X_train shape : (280, 14) X_val shape : (94, 14) y_train shape : (280, 2) y_val shape : (94, 2)

调用函数时的参数:

first neuron units:4
second neuron units: 8
learning rate= 0.0001
epochs= 1000
batch_size=32

还有指标图:

【问题讨论】:

  • 请打印出 X_train、X_val、y_train、y_val 的形状。还显示每层中神经元数量的值。显示几个时期的 model.fit 打印输出
  • 嗨,格里,我把你说的都包括在内了。请参阅我的编辑。我真的坚持这一点,我不明白为什么它仍然停留在 0。可能是实施了一些错误的 Keras 参数吗?

标签: tensorflow keras deep-learning


【解决方案1】:

从验证准确度图中可以清楚地看出它正在发生变化,因此损失也必须发生变化。我怀疑您为损失绘制了错误的值,这就是为什么我想查看实际的 model.fit 打印的训练数据。确保你有这些损失的任务'

val_loss=history.history('val_loss')
train_loss=history.history('loss')

还建议您将 learning_rate 提高到 .001

【讨论】:

  • 我就是这样策划的。似乎问题来自 keras 损失“categorical_crossentropy”,因为当我尝试使用“binary crossentropy”时它可以工作。我也尝试过 keras.losses.CategoricalCrossentropy(name='categorical_crossentropy') 并且发生了同样的情况
  • 嗯,奇怪的是,您的标签具有正确的分类尺寸,即 2。您的 y 值是整数还是字符串?如果整数值 0 和 1 我可以看到为什么二进制可以工作。
猜你喜欢
  • 2020-08-25
  • 1970-01-01
  • 2019-11-29
  • 2018-04-05
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 2020-09-19
  • 2018-07-08
相关资源
最近更新 更多