如何将 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 中被替换(例如 GradientDescentOptimizerkeras.optimizers.SGD 替换),我能够弄清楚如何重构我的大部分代码,但我不知道如何重构 tf.placeholderfeed_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 已弃用,因此升级该部分将需要进行更多更改。