如何解决将模型内的Tensorflow操作列表自动转换为ListWrapper
我正在检查一个tf.keras代码,发现在自定义model.Model实例中时,分配给tf
变量的self
个操作的每个列表都会自动转换为{{1} }对象。
代码显示了此功能的示例:
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,name='conv_{}'.format(0),**options)
self.conv2 = [layers.Conv2D(filters=width,**options)]
self.depth = depth
tensorflow.python.training.tracking.data_structures.ListWrapper
type(self.convs)
tensorflow.python.keras.layers.convolutional.Conv2D
type(self.conv)
tensorflow.python.training.tracking.data_structures.ListWrapper
其中可以看到type(self.conv2)
和self.convs
是self.conv2
而不是列表。相反,如果该类不继承自ListWrapper
:
Model
创建常用列表:
class CustomModel2(object):
def __init__(self,**kwargs):
# super(CustomModel,**options)]
self.depth = depth
列表
type(self.convs)
tensorflow.python.keras.layers.convolutional.Conv2D
type(self.conv)
列表
所以,我的问题是为什么会这样?在列表中使用type(self.conv2)
有什么好处?另外,如何使用此类型?我知道我可以例如通过ListWrapper
循环访问其成员。我还应该了解其他属性吗?
有一个类似的问题here,但这个问题和答案都没有使我满意。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com(将#修改为@)