张量流将张量传递给优化器,可以更好地最小化函数训练



我在tensorflow中遇到了一些奇怪的东西(对我来说(,希望有人能阐明这种情况。

我有一个简单的神经网络来处理图像。 我最小化的成本函数是简单的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的这些新实现,我甚至无法接近使用原始"错误"实现获得的结果。

原来的训练方式是有效的吗?如果是这样,如何实现正则化器?如果没有,我对新实现做错了什么?为什么我无法复制结果?

你能准确地说出你的意思吗

我能够取得更大的结果[..]

我假设您有另一个指标而不是cost- 这次是实际的标量,它使您能够比较每种方法训练的模型。

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

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

最新更新