无脑小松鼠 2020-02-21 15:53 采纳率: 50%
浏览 1375

TensorFlow2.0训练模型时,指标不收敛一直上升到1

我尝试着使用tf2.0来搭建一个DeepFM模型来预测用户是否喜欢某部影片,

optimizer选择Adam,loss选择BinaryCrossentropy,评价指标是AUC;

因为涉及到了影片ID,所以我用了shared_embedding,并且必须关闭eager模式;

选用binary_crossentropy作为损失函数时模型在训练时AUC很快就到1了,但选用categorical_crossentropy时loss没太大变化,并且AUC一直保持在0.5,准确率也一直在0.5附近震荡。

下面是选用binary_crossentropy时的输出日志:

图片说明
图片说明

下面是我的代码:

one_order_feature_layer = tf.keras.layers.DenseFeatures(one_order_feature_columns)
one_order_feature_layer_outputs = one_order_feature_layer(feature_layer_inputs)

two_order_feature_layer = tf.keras.layers.DenseFeatures(two_order_feature_columns)
two_order_feature_layer_outputs = two_order_feature_layer(feature_layer_inputs)

# lr部分
lr_layer = tf.keras.layers.Dense(len(one_order_feature_columns), kernel_initializer=initializer)(
    one_order_feature_layer_outputs)

# fm部分
reshape = tf.reshape(two_order_feature_layer_outputs,
                     [-1, len(two_order_feature_columns), two_order_feature_columns[0].dimension])
sum_square = tf.square(tf.reduce_sum(reshape, axis=1))
square_sum = tf.reduce_sum(tf.square(reshape), axis=1)
fm_layers = tf.multiply(0.5, tf.subtract(sum_square, square_sum))

# DNN部分
dnn_hidden_layer_1 = tf.keras.layers.Dense(64, activation='selu', kernel_initializer=initializer,
                                           kernel_regularizer=regularizer)(two_order_feature_layer_outputs)
dnn_hidden_layer_2 = tf.keras.layers.Dense(64, activation='selu', kernel_initializer=initializer,
                                           kernel_regularizer=regularizer)(dnn_hidden_layer_1)
dnn_hidden_layer_3 = tf.keras.layers.Dense(64, activation='selu', kernel_initializer=initializer,
                                           kernel_regularizer=regularizer)(dnn_hidden_layer_2)
dnn_dropout = tf.keras.layers.Dropout(0.5, seed=29)(dnn_hidden_layer_3)

# 连接并输出
concatenate_layer = tf.keras.layers.concatenate([lr_layer, fm_layers, dnn_dropout])
out_layer = tf.keras.layers.Dense(1, activation='sigmoid')(concatenate_layer)
model = tf.keras.Model(inputs=[v for v in feature_layer_inputs.values()], outputs=out_layer)
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate),
              loss=tf.keras.losses.BinaryCrossentropy(),
              metrics=['AUC'])
# tf.keras.utils.plot_model(model, 'test.png', show_shapes=True)
train_ds = make_dataset(train_df, buffer_size=None, shuffle=True)
test_ds = make_dataset(test_df)
with tf.compat.v1.Session() as sess:
    sess.run([tf.compat.v1.global_variables_initializer(), tf.compat.v1.tables_initializer()])
    model.fit(train_ds, epochs=5)
    loss, auc = model.evaluate(test_ds)
    print("AUC", auc)

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-02-21 16:23
    关注

    不同的损失函数之间LOSS没有可比性。关键看你的auc(正确率)
    因为你是2分类,所以0.5等于没有效果。在数据平衡的前提下,如果达到0.8 0.9就是有效果了。

    评论

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c