如何将 feed_dict 和占位符迁移到 TensorFlow 2?
How do I migrate feed_dict and placeholder to TensorFlow 2?
我正在尝试将一个简单的片段从 TensorFlow 1.x 转换为 TensorFlow 2:
# ########## TensorFlow 1.x code: ##########
import numpy as np
import tensorflow as tf
coefficients = np.array([[1.], [-10.], [25.]])
w = tf.Variable(0, dtype=tf.float32)
x = tf.placeholder(tf.float32, [3, 1])
cost = (x[0][0] * (w**2)) + (x[1][0]*w) + (x[2][0])
train = tf.train.GradientDescentOptimizer(0.05).minimize(cost)
if __name__ == '__main__':
init = tf.global_variables_initializer()
session = tf.Session()
session.run(init)
for i in range(100):
session.run(train, feed_dict={x: coefficients})
print(session.run(w))
许多旧的 API 已在 TF2 中被替换(例如 GradientDescentOptimizer
被 keras.optimizers.SGD
替换),我能够弄清楚如何重构我的大部分代码,但我不知道如何重构 tf.placeholder
和 feed_dict
以及这两者如何相互作用。 TF2 中是否简单地避免了占位符的使用?
通常使用 @tf.function
并将占位符转换为函数参数。 sess.run
然后被替换为调用该函数。用于 return ops(如 minimize
)的东西现在只在函数内部调用。这是您转换后的代码段:
coefficients = tf.constant([[1.], [-10.], [25.]])
w = tf.Variable(0.0)
@tf.function
def train(x):
cost = (x[0][0] * (w**2)) + (x[1][0]*w) + (x[2][0])
tf.compat.v1.train.GradientDescentOptimizer(0.05).minimize(cost, var_list=[w])
for i in range(100):
train(coefficients)
print(w)
如您所述,train.GradientDescentOptimizer
已弃用,因此升级该部分将需要进行更多更改。
我正在尝试将一个简单的片段从 TensorFlow 1.x 转换为 TensorFlow 2:
# ########## TensorFlow 1.x code: ##########
import numpy as np
import tensorflow as tf
coefficients = np.array([[1.], [-10.], [25.]])
w = tf.Variable(0, dtype=tf.float32)
x = tf.placeholder(tf.float32, [3, 1])
cost = (x[0][0] * (w**2)) + (x[1][0]*w) + (x[2][0])
train = tf.train.GradientDescentOptimizer(0.05).minimize(cost)
if __name__ == '__main__':
init = tf.global_variables_initializer()
session = tf.Session()
session.run(init)
for i in range(100):
session.run(train, feed_dict={x: coefficients})
print(session.run(w))
许多旧的 API 已在 TF2 中被替换(例如 GradientDescentOptimizer
被 keras.optimizers.SGD
替换),我能够弄清楚如何重构我的大部分代码,但我不知道如何重构 tf.placeholder
和 feed_dict
以及这两者如何相互作用。 TF2 中是否简单地避免了占位符的使用?
通常使用 @tf.function
并将占位符转换为函数参数。 sess.run
然后被替换为调用该函数。用于 return ops(如 minimize
)的东西现在只在函数内部调用。这是您转换后的代码段:
coefficients = tf.constant([[1.], [-10.], [25.]])
w = tf.Variable(0.0)
@tf.function
def train(x):
cost = (x[0][0] * (w**2)) + (x[1][0]*w) + (x[2][0])
tf.compat.v1.train.GradientDescentOptimizer(0.05).minimize(cost, var_list=[w])
for i in range(100):
train(coefficients)
print(w)
如您所述,train.GradientDescentOptimizer
已弃用,因此升级该部分将需要进行更多更改。