TensorFlow 2.0如何从tf.keras.layers层获取可训练变量,例如Conv2D或Dense

马特·斯特

我一直在尝试从我的图层中获取可训练的变量,但找不到解决方法。所以这是我尝试过的:

我尝试直接访问Dense或Conv2D对象的内核和bias属性,但无济于事。我得到的结果类型是“密集对象没有属性'kernel'”。

trainable_variables.append(conv_layer.kernel)
trainable_variables.append(conv_layer.bias)

同样,我尝试通过以下方式使用属性“ trainable_variables”:

trainable_variables.extend(conv_layer.trainable_variables)

据我所知,这应该返回两个变量的列表,权重和偏差变量。但是,我得到的是一个空列表。

关于如何从TensorFlow 2.0中的标签获取变量的任何想法吗?我希望以后能够以类似于以下方式将这些变量提供给优化器:

gradients = tape.gradient(loss, trainable_variables)
optimizer.apply_gradients(zip(gradients, trainable_variables))

编辑:这是我当前代码的一部分,用作示例并帮助回答问题(希望它可读)

from tensorflow.keras.layers import Dense, Conv2D, Conv2DTranspose, Reshape, Flatten

... 

class Network:
    def __init__(self, params):
        weights_initializer = tf.initializers.GlorotUniform(seed=params["seed"])
        bias_initializer = tf.initializers.Constant(0.0)

        self.trainable_variables = []

        self.conv_layers = []
        self.conv_activations = []
        self.create_conv_layers(params, weights_initializer, bias_initializer)

        self.flatten_layer = Flatten()


        self.dense_layers = []
        self.dense_activations = []
        self.create_dense_layers(params, weights_initializer, bias_initializer)

        self.output_layer = Dense(1, kernel_initializer=weights_initializer, bias_initializer=bias_initializer)
        self.trainable_variables.append(self.output_layer.kernel)
        self.trainable_variables.append(self.output_layer.bias)

    def create_conv_layers(self, params, weight_init, bias_init):
        nconv = len(params['stride'])
        for i in range(nconv):
            conv_layer = Conv2D(filters=params["nfilter"][i],
                                kernel_size=params["shape"][i], kernel_initializer=weight_init,
                                kernel_regularizer=spectral_norm,
                                use_bias=True, bias_initializer=bias_init,
                                strides=params["stride"][i],
                                padding="same", )
            self.conv_layers.append(conv_layer)
            self.trainable_variables.append(conv_layer.kernel)
            self.trainable_variables.append(conv_layer.bias)
            self.conv_activations.append(params["activation"])

    def create_conv_layers(self, params, weight_init, bias_init):
        nconv = len(params['stride'])
        for i in range(nconv):
            conv_layer = Conv2D(filters=params["nfilter"][i],
                                kernel_size=params["shape"][i], kernel_initializer=weight_init,
                                kernel_regularizer=spectral_norm,
                                use_bias=True, bias_initializer=bias_init,
                                strides=params["stride"][i],
                                padding="same", )
            self.conv_layers.append(conv_layer)
            self.trainable_variables.append(conv_layer.kernel)
            self.trainable_variables.append(conv_layer.bias)
            self.conv_activations.append(params["activation"])

如您所见,我正在尝试将我的所有可训练变量收集到一个名为trainable_variables的列表属性中。但是,正如我提到的那样,此代码不起作用,因为在尝试获取这些层对象的内核和偏向属性时遇到错误。

马特·斯特

好的,所以我认为我找到了问题。

在使用给定的图层对象之前,可训练变量不可用。运行前进通道后,我可以检索tf.keras.layers.Layer对象的属性,例如trainable_variables和weights。

但是,在前进通过之前,我收到了一个空名单。为了使事情更加清楚:

with tf.GradientTape() as tape:
    print(dense_layers[0].trainable_variables)
    self.forward_pass(X)
    self.compute_loss()
    print(dense_layers[0].trainable_variables)

在上面的代码中,trainable_variables属性在执行self.forward_pass之前是一个空列表。但是,在此之后,我可以检索内核并偏向numpy数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有padding ='SAME'的Tensorflow / Keras Conv2D层的行为异常

来自分类Dev

在 tensorflow Keras 中将图像拟合到 Conv2D 层时出错

来自分类Dev

Tensorflow Keras Conv2D多个过滤器

来自分类Dev

TensorFlow 2-tf.keras:如何使用tf.data API和TFRecords训练像MTCNN这样的tf.keras多任务网络

来自分类Dev

如何理解Keras Conv2D层的第一个论点?

来自分类Dev

tf.keras.layers.Conv2D用法

来自分类Dev

Tensorflow build()如何从tf.keras.layers.Layer工作

来自分类Dev

如何在TensorFlow 2中获得Keras张量的值?

来自分类Dev

在 Tensorflow 中查找 conv2d 层的权重

来自分类Dev

如何使用张量流/ keras中的预定内核列表初始化Conv2D层?

来自分类Dev

如何在Keras中找到预训练的InceptionResNetV2模型不同层中的激活形状-Tensorflow 2.0

来自分类Dev

创建可计算2D DCT的Keras / Tensorflow层

来自分类Dev

如何在具有tensorflow2和keras的多GPU上训练模型?

来自分类Dev

如何将使用Keras模型训练的Tensorflow 2. *转换为.onnx格式?

来自分类Dev

TensorFlow V2.x和tf.keras的所有随机种子是什么?

来自分类Dev

如何在Tensorflow 2.x Keras自定义层中使用多个输入?

来自分类Dev

如何在keras中将Conv1D的输出与Conv2D的输出合并

来自分类Dev

Keras:过度拟合的Conv2D

来自分类Dev

keras tensorflow2获得训练数据的结果

来自分类Dev

在tensorflow 2中从零开始训练keras应用

来自分类Dev

来自tf.nn.conv2d和keras.layers.Conv2D的不相等输出

来自分类常见问题

如何在Tensorflow中从tf.keras导入keras?

来自分类Dev

如何获得可再现的结果(Keras,Tensorflow):

来自分类Dev

将tf.keras.layers与Tensorflow低级API结合使用

来自分类Dev

了解Keras Conv2D层中的参数数量

来自分类Dev

在Keras中是否可以看到Conv2D层之后的输出

来自分类Dev

“编译”时如何在急切模式下执行TensorFlow 2 Keras顺序模型?

来自分类Dev

如何在具有tensorflow v2.x后端的keras中加载具有tensorflow v1.x后端的keras模型?

来自分类Dev

Keras:转置Conv2D层的内核以在另一个Conv2D层中重用

Related 相关文章

  1. 1

    具有padding ='SAME'的Tensorflow / Keras Conv2D层的行为异常

  2. 2

    在 tensorflow Keras 中将图像拟合到 Conv2D 层时出错

  3. 3

    Tensorflow Keras Conv2D多个过滤器

  4. 4

    TensorFlow 2-tf.keras:如何使用tf.data API和TFRecords训练像MTCNN这样的tf.keras多任务网络

  5. 5

    如何理解Keras Conv2D层的第一个论点?

  6. 6

    tf.keras.layers.Conv2D用法

  7. 7

    Tensorflow build()如何从tf.keras.layers.Layer工作

  8. 8

    如何在TensorFlow 2中获得Keras张量的值?

  9. 9

    在 Tensorflow 中查找 conv2d 层的权重

  10. 10

    如何使用张量流/ keras中的预定内核列表初始化Conv2D层?

  11. 11

    如何在Keras中找到预训练的InceptionResNetV2模型不同层中的激活形状-Tensorflow 2.0

  12. 12

    创建可计算2D DCT的Keras / Tensorflow层

  13. 13

    如何在具有tensorflow2和keras的多GPU上训练模型?

  14. 14

    如何将使用Keras模型训练的Tensorflow 2. *转换为.onnx格式?

  15. 15

    TensorFlow V2.x和tf.keras的所有随机种子是什么?

  16. 16

    如何在Tensorflow 2.x Keras自定义层中使用多个输入?

  17. 17

    如何在keras中将Conv1D的输出与Conv2D的输出合并

  18. 18

    Keras:过度拟合的Conv2D

  19. 19

    keras tensorflow2获得训练数据的结果

  20. 20

    在tensorflow 2中从零开始训练keras应用

  21. 21

    来自tf.nn.conv2d和keras.layers.Conv2D的不相等输出

  22. 22

    如何在Tensorflow中从tf.keras导入keras?

  23. 23

    如何获得可再现的结果(Keras,Tensorflow):

  24. 24

    将tf.keras.layers与Tensorflow低级API结合使用

  25. 25

    了解Keras Conv2D层中的参数数量

  26. 26

    在Keras中是否可以看到Conv2D层之后的输出

  27. 27

    “编译”时如何在急切模式下执行TensorFlow 2 Keras顺序模型?

  28. 28

    如何在具有tensorflow v2.x后端的keras中加载具有tensorflow v1.x后端的keras模型?

  29. 29

    Keras:转置Conv2D层的内核以在另一个Conv2D层中重用

热门标签

归档