替换TensorFlow 2中的“占位符”

时间:2019-12-11 14:01:10

标签: python tensorflow

我是ML的初学者,对TF有基本的了解。我正在将基于TF1的代码转换为TF2兼容代码(不使用tf.compat.v1),该代码使用了现在不推荐使用的tf.placeholder。

我要重写此代码段:

class MyNeuralNet:
    def __init__(self, x, t):
        ...
        self.x = x
        self.t = t

        self.sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
                                                     log_device_placement=True))

        self.x_tf = tf.placeholder(tf.float32, shape=[None, self.x.shape[1]])
        self.t_tf = tf.placeholder(tf.float32, shape=[None, self.t.shape[1]])

        self.f_pred = self.net_f(self.x_tf)

        self.loss = tf.reduce_mean(tf.square(self.f_pred))

        self.optimizer_Adam = tf.train.AdamOptimizer()
        self.train_op_Adam = self.optimizer_Adam.minimize(self.loss)

    def net_f(self, x, t):
        u = self.MyNet(x,t)    # MyNet defines custom layers (not shown here)
        f = tf.gradients(u, t)[0]
        return f

    def train(self, nIter):
        tf_dict = {self.x_tf: self.x, self.t_tf: self.t}
        self.sess.run(self.train_op_Adam, tf_dict)

(我只保留了父代码https://github.com/maziarraissi/PINNs/blob/master/appendix/continuous_time_identification%20(Burgers)/Burgers.py中的相关代码段)

在此代码中,可以使用字典tf_dict传递定义为tf.placeholder的张量。在TF2中,我需要以不同的方式定义loss和train_op_Adam。我怎样才能做到这一点 ?我应该将它们定义为函数并传递参数吗?

我知道这可能是将以TF1编写的代码迁移到TF2的经典问题。通过使用https://www.tensorflow.org/guide/migrate中的示例,我无法使其正常工作。

0 个答案:

没有答案