从Tensorflow 1.13转换为Tensorflow 2.0

2024-10-06 12:25:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过将一些代码从1.13转换为2.0来熟悉新的Tensorflow 2.0。我是Tensorflow的初学者,但我认为继续学习2.0而不是1.13可能是更好的选择。在

我已经尝试过转换脚本,但感觉它主要只是向相关部分添加tf.compat.v1。 代码是A2C实现的一部分,参与者应该使用正态分布。我不太确定如何在TensorFlow2.0中实现这一部分,尤其是如何像原始代码中那样获得mu和sigma。在

原始代码如下:

def build_actor_net(self, scope, trainable):
        with tf.variable_scope(scope):
            dl1 = tf.contrib.layers.fully_connected(inputs=self.s, num_outputs=200,
                                                    activation_fn=tf.nn.relu,
                                                    trainable = trainable,
                                                    scope='dl1')

            mu = 2 * tf.contrib.layers.fully_connected(inputs=dl1, num_outputs=self.num_action,
                                                    activation_fn=tf.nn.tanh,
                                                    trainable = trainable,
                                                   scope='mu')
            sigma = tf.contrib.layers.fully_connected(inputs=dl1, num_outputs=self.num_action,
                                                       activation_fn=tf.nn.softplus,
                                                       trainable=trainable,
                                                       scope='sigma')
            norm_dist = tf.contrib.distributions.Normal(loc=mu, scale=sigma)


            return norm_dist

以下是我尝试过的:

^{pr2}$

显然,self.actor.add(2 * keras.layers.Dense(512, activation='tanh'))不会因为乘法而起作用。如何正确地将代码转换为版本2.0?在


Tags: 代码selflayerstfcontribactivationsigmanum
1条回答
网友
1楼 · 发布于 2024-10-06 12:25:48

tf.keras.Model类的思想是在__init__中定义您的层,您应该在call中实现模型的前向传递。在

在您的情况下:

class Actor(keras.Model):
    def __init__(self, act_dim):
        super().__init__('mlp_policy')

        # Dl1
        self.dl1 = keras.layers.Dense(100, activation='relu')

        # Mu
        self.mu = keras.layers.Dense(units=act_dim, activation='tanh')

        # Sigma
        self.sigma = keras.layers.Dense(units=act_dim, activation='softplus')

    def call(self, inputs):
        dl1 = self.dl1(inputs)

        mu = 2 * self.mu(dl1)
        sigma = self.sigma(dl1)

        norm_dist = tf.contrib.distributions.Normal(loc=mu, scale=sigma)
        return norm_dist

相关问题 更多 >