Tensorflow2:SGD对象没有属性minimum

问题描述 投票:0回答:2

我是 Tensorflow2 的新手,所以我希望问题不是太基础,我正在遵循 https://github.com/Apress/Machine-Learning-for-Economics-and-Finance-in-TensorFlow 中的练习-2。 其中一项练习是使用 SGD 最小化函数,我的代码返回了(它起作用了,然后突然停止了):“‘SGD’对象没有属性‘最小化’”。如果我尝试复制来自 https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Optimizer (用法)的示例,也会发生同样的情况:

import tensorflow as tf
import keras as keras

print(tf.__version__)
print(keras.__version__)

print(tf.optimizers.SGD)

# Create an optimizer with the desired parameters.
opt = keras.optimizers.SGD(learning_rate=0.1)
var1, var2 = tf.Variable(1.0), tf.Variable(2.0)
# `loss` is a callable that takes no argument and returns the value
# to minimize.
loss = lambda: 3 * var1 * var1 + 2 * var2 * var2
# Call minimize to update the list of variables.
opt.minimize(loss, var_list=[var1, var2])

我正在运行tensorflow 2.16.0-dev20240108和keras 3.0.3.dev2024010903。

正如我所说,我是新手,因此非常感谢任何帮助。

我检查了有关堆栈溢出的其他帖子/问题,但没有找到解决方案。我还更新了tensorflow和keras。我期待代码运行。

python keras tensorflow2.0
2个回答
0
投票
import tensorflow as tf

print(tf.__version__)

# Create an optimizer with the desired parameters.
opt = tf.keras.optimizers.SGD(learning_rate=0.1)
var1, var2 = tf.Variable(1.0), tf.Variable(2.0)
# `loss` is a callable that takes no argument and returns the value
# to minimize.
loss = lambda: 3 * var1 * var1 + 2 * var2 * var2
# Call minimize to update the list of variables.
opt.minimize(loss, var_list=[var1, var2])

此代码使用 TensorFlow 的集成 Keras API,应该可以解决该问题。


0
投票

我还没有完整的解决方案,但我认为这是因为代码是针对 Keras 2 的,但你使用的是 Keras 3。理论上,你可以使用

tf.keras.optimizers.legacy.SGD
,但你首先必须安装旧的 Keras 。以下是 Keras 提供的关于如何使用旧版 keras 代码的提示(如果您尝试使用
tf.keras.optimizers.legacy.SGD
就会出现):

ImportError: Keras 3 中不支持

keras.optimizers.legacy
。使用
tf.keras
时,要继续使用
tf.keras.optimizers.legacy
优化器,可以安装
tf_keras
包(Keras 2)并设置环境变量
TF_USE_LEGACY_KERAS=True
进行配置TensorFlow 在访问
tf_keras
时使用
tf.keras

© www.soinside.com 2019 - 2024. All rights reserved.