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

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

我在 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 的这些新实现,我什至无法接近使用原始“错误”实现获得的结果。

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

最佳答案

你能准确地说一下你的意思吗

I was able to achieve greater result [..]

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

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

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

关于python - tensorflow 将张量传递给优化器最小化函数可以更好地训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51968626/

相关文章:

python - 属性错误: 'Model' object has no attribute '_name' during input layer concatenation

machine-learning - 从 tensorflow 模型检查点提取权重值

类似于 Python 的 Java 类列表

Python 脚本查找文件中的文本并对其进行检查

python - python中使用的存储大量数组

python - 训练过程中的过多步骤会扰乱机器学习的训练过程吗?

java - 从 deeplearning4j 层提取特征

python - 如何准确地将 L1 正则化添加到 tensorflow 误差函数

python - 尽管 CNN 在训练和测试方面具有非常好的准确性,但在随机图像上表现不佳

python - 高效访问索引: is storing indices in a dict the fastest way?