KERAS的MSE损失函数显示出不同的输出,而MSE的张量指标



我正在训练最后一层连续输出的卷积网络。最后一层有4个节点。我将平均误差作为损失函数。作为检查,我使用了TensorFlow中的平方误差。这仅给出了第一个时期第一批次的结果。因此,我的问题是为什么它们有所不同?我使用了带有最大池的卷积层,最后我将其压扁并使用了辍学。

此外,我还想知道如何计算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])

您正在返回函数本身。

查看您的代码:

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"

尝试先纠正此。

最新更新