【问题标题】:MSE loss function of Keras shows different output then MSE metric of Tensorflow?Keras 的 MSE 损失函数显示与 Tensorflow 的 MSE 度量不同的输出?
【发布时间】:2019-05-13 12:05:15
【问题描述】:

我正在训练一个在最后一层具有连续输出的卷积网络。最后一层有4个节点。我使用均方误差作为损失函数。作为检查,我使用了 Tensorflow 的均方误差。这对于第一个时期的第一批仅给出了相同的结果。因此我的问题是为什么这些不同?我使用了最大池化的卷积层,最后我将它展平并使用了 dropout。

此外,我还想知道如何计算 4 个节点的均方误差?它只是对每个节点的均方误差求和吗?因为当我计算每个节点的均方误差时,没有明确的连接。

这是指标。

def loss(y_true, y_pred):
    loss = tf.metrics.mean_squared_error(y_true, y_pred)[1]
    K.get_session().run(tf.local_variables_initializer())
    return loss

我在这里编译模型

model.compile(loss='mse', optimizer= adam, metrics=[loss, node])

这就是我计算一个节点的均方误差的方法:

def node(y_true, y_pred):
    loss = tf.metrics.mean_squared_error(y_true[:,0], y_pred[:,0])[1]
    K.get_session().run(tf.local_variables_initializer())
    return node

这是模型的简化形式:

    width = height = 128
    model = Sequential()

    model.add(Convolution2D(filters=64, kernel_size=(5, 5), activation='relu', padding='same',
                            input_shape=(width, height, 1)))
     model.add(MaxPooling2D(pool_size=(3, 3)))
    model.add(Flatten())
    model.add(Dense(units=256, activation='relu'))
    model.add(Dropout(0.4))
    model.add(Dense(units=4, activation='linear'))

    adam = Adam(lr=0.01, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0) 
    model.compile(loss='mse', optimizer= adam, metrics=[loss,node])

【问题讨论】:

  • “最后一层有4个节点”是什么意思?代码将是说明性的。
  • 我添加了模型的简化形式
  • 您能否在检查指标损失和训练损失的地方添加代码?

标签: python tensorflow keras mean-square-error


【解决方案1】:

您正在返回函数本身。

看看你的代码:

def node(y_true, y_pred):
    loss = tf.metrics.mean_squared_error(y_true[:,0], y_pred[:,0])[1]
    K.get_session().run(tf.local_variables_initializer())
    return node # This is a function name. This should be "return loss"

先尝试纠正这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    相关资源
    最近更新 更多