【发布时间】:2017-06-20 22:41:55
【问题描述】:
我想在我的loss 上运行AdamOptimizer 操作之前添加一个额外的操作,以帮助模型处理我的数据中的重复。相关代码 sn-p 看起来是这样的:
loss = tf.nn.softmax_cross_entropy_with_logits(logits=predLogits, labels=actLabels)
loss = tf.reshape(loss, [batchsize, -1])
repMask = tf.sqrt(tf.cast(tf.abs(tf.subtract(tf.cast(Y, tf.int64), tf.cast(X, tf.int64))), tf.float32))
lossPost = loss - repMask
train_step = tf.train.AdamOptimizer(LR).minimize(lossPost)
因此,换句话说,我不想最小化loss,而是希望AdamOptimizer 最小化其略微调整的版本,即lossPost。然后我以通常的方式训练模型:
_ = sess.run([train_step], feed_dict=feed_dict)
我注意到添加最小化lossPost 而不是loss 的解决方法对模型的准确性没有影响。无论有没有这种变通方法,该模型都会产生完全相同的输出。看来它还在继续优化原始的、未修改的loss。为什么会这样?
我最初的方法是在softmax_cross_entropy_with_logits 步骤执行此调整,而是使用weighted_cross_entropy_with_logits,但我有一个额外的复杂性,因为有一个额外的词汇维度(这是一个字符级-样式模型)。所以我觉得做这个后记会更容易,只要在优化步骤之前完成应该是可行的?
【问题讨论】:
标签: machine-learning tensorflow