python - 将模型内的张量流操作列表自动转换为 ListWrapper
问题描述
我正在检查 tf.keras 代码,我发现当在自定义 model.Model 实例中时,tf
分配给self
变量的每个操作列表都会自动转换为ListWrapper
对象。此功能的示例显示在代码中:
from tensorflow.keras import models
from tensorflow.keras import layers
from tensorflow.keras import initializers
class CustomModel(models.Model):
def __init__(self, width, depth, **kwargs):
super(CustomModel, self).__init__(**kwargs)
self.width = width
options = {
'kernel_size': 3,
'strides': 1,
'padding': 'same',
'kernel_initializer': initializers.RandomNormal(mean=0.0, stddev=0.01, seed=None)
}
self.convs = [layers.Conv2D(filters=width, bias_initializer='zeros', name='convs_{}'.format(i), **options)
for i in range(depth)]
self.conv = layers.Conv2D(filters=width, bias_initializer='zeros', name='conv_{}'.format(0), **options)
self.conv2 = [layers.Conv2D(filters=width, bias_initializer='zeros', name='conv_{}'.format(0), **options)]
self.depth = depth
如果选中(例如在调试器中):
type(self.convs)
tensorflow.python.training.tracking.data_structures.ListWrapper
type(self.conv)
tensorflow.python.keras.layers.convolutional.Conv2D
type(self.conv2)
tensorflow.python.training.tracking.data_structures.ListWrapper
在哪里可以看到,self.convs
而self.conv2
不是ListWrapper
列表。相反,如果该类不继承自Model
:
class CustomModel2(object):
def __init__(self, width, depth, **kwargs):
# super(CustomModel, self).__init__(**kwargs)
self.width = width
options = {
'kernel_size': 3,
'strides': 1,
'padding': 'same',
'kernel_initializer': initializers.RandomNormal(mean=0.0, stddev=0.01, seed=None)
}
self.convs = [layers.Conv2D(filters=width, bias_initializer='zeros', name='convs_{}'.format(i), **options)
for i in range(depth)]
self.conv = layers.Conv2D(filters=width, bias_initializer='zeros', name='conv_{}'.format(0), **options)
self.conv2 = [layers.Conv2D(filters=width, bias_initializer='zeros', name='conv_{}'.format(0), **options)]
self.depth = depth
创建通常的列表:
type(self.convs)
列表
type(self.conv)
tensorflow.python.keras.layers.convolutional.Conv2D
type(self.conv2)
列表
所以,我的问题是为什么会这样?使用ListWrapper
over list有什么好处?另外,我该如何使用这种类型?例如,我知道我可以通过for
循环访问其成员。还有其他我应该知道的属性吗?
这里有一个类似的问题,但问题和答案都不让我满意。
解决方案
推荐阅读
- flutter - 状态发生变化时如何导航到另一个屏幕
- wordpress - 创建新的自定义帖子时创建 Wordpress 用户
- wordpress - 是否可以将本地 WordPress 博客的 public 设置为 false
- python - 使用替换字典随机替换文件中的某些单词
- bash - 在 dokefile 运行指令中转义带有特殊字符和单引号的字符串
- matlab - 获取八度音阶中给定参数的列表
- java - 如何限制用户使用 Java Streams 从列表中仅选择两个枚举?
- java - 错误 69 87 何时使用生物特征验证 APDU 指令
- css - 将动态大小的 div 放置在另一个动态大小的 div 的底部
- odoo - Odoo 无法解析我的 xml 文件中的树视图