张量流将张量传递给优化器以使功能最小化更好地训练

时间:2018-08-22 14:01:42

标签: python tensorflow deep-learning conv-neural-network

我在张量流中遇到了一些(对我而言)有点奇怪的事情,希望有人能对此情况有所了解。

我有一个处理图像的简单神经网络。我要最小化的成本函数是简单的MSE。

首先,我实现了以下内容:

cost = tf.square(DECONV - Y)

然后我将其传递给优化器,如下所示:

optimizer = tf.train.RMSPropOptimizer(learning_rate).minimize(cost)

通过此实施,我能够获得不错的结果。但是,当我尝试实现一个正则化器时,我意识到我没有将标量值传递给optimizer.minimize(),而是实际上传递了形状为[batch,dim_x,dim_y]的张量。

我将实现更改为以下内容:

cost = tf.losses.mean_squared_error(Y, DECONV)

以及许多类似的变体:

cost = tf.reduce_mean(tf.square(tf.subtract(DECONV, Y))) 

我的问题是,使用MSE的这些新实现,我什至无法接近使用原始“错误”实现所获得的结果。

原始方式是否是有效的培训方式?如果是这样,我如何实现正则化器?如果没有,我在新的实现方式上做错了什么?为什么我不能复制结果?

1 个答案:

答案 0 :(得分:1)

您能否精确理解

  

我能够取得更大的成绩[..]

我假设您有一个除cost之外的度量标准-这次是一个实际标量,它使您可以比较每种方法训练的模型。

还,您是否尝试过调整第二种方法的学习率?我之所以这么问是因为我的直觉是,当您要求张量流最小化张量时(据我所知,这没有数学意义),它会使通过张量的所有轴求和而得到的标量最小化。 tf.gradients就是这样工作的,也是我认为这种情况发生的原因。因此,也许在第二种方法中,如果将学习率乘以batch*dim_x*dim_y,您将获得与第一种方法相同的行为。

即使这可行,我也不认为将张量传递给minimize函数不是一个好主意-最小化d维值没有任何意义,因为在这样的空间中没有定序规则。