我遇到Tensorflow问题。我已将问题缩小到tf-keras中自定义Attention层的build()方法的输入形状的格式。我正在获取Dimension()对象的列表,而不是实际的输入形状。请帮忙。
注意层
x_attn = []
for i in range(self.attn_range): #4
x_attn.append(Attention()(x))
print("DEBUG:00001")
x = L.concatenate(-1)(x_attn)
自定义注意层build()方法:
def build(self,input_shape):
print("DEBUG:00005")
params_shape = list(input_shape[1:])
print("DEBUG:00007",params_shape)
self.query_weights = self.add_weight(
name='q_weights',shape=params_shape,initializer=self.q_weights_init
)
print("DEBUG:00006")
self.key_weights = self.add_weight(
name='key_weights',initializer=self.key_weights_init
)
self.val_weights = self.add_weight(
name='val_weights',initializer=self.value_weights_init
)
参数形状调试打印功能的输出为:
DEBUG:00007 [Dimension(10),Dimension(5),Dimension(128)]
编辑:
要求的完整错误消息:
Traceback (most recent call last):
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/tensor_util.py",line 558,in make_tensor_proto
str_values = [compat.as_bytes(x) for x in proto_values]
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/tensor_util.py",in <listcomp>
str_values = [compat.as_bytes(x) for x in proto_values]
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/util/compat.py",line 65,in as_bytes
(bytes_or_text,))
TypeError: Expected binary or unicode string,got Dimension(10)
During handling of the above exception,another exception occurred:
Traceback (most recent call last):
File "Empowerment\.py",line 327,in <module>
env_actor = ComputerEnv()
File "Empowerment\.py",line 225,in __init__
self.dqn = ICDQNAgent(self.state_size + (3,),self.state_size[0],4)
File "Empowerment\.py",line 78,in __init__
self.model,self.autoencoder,self.critic = self.build_model()
File "Empowerment\.py",line 99,in build_model
x_attn.append(Attention()(x))
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py",line 591,in __call__
self._maybe_build(inputs)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py",line 1881,in _maybe_build
self.build(input_shapes)
File "/home/ai/Desktop/ai_proj/layers.py",line 69,in build
initializer=self.q_weights_init
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py",line 384,in add_weight
aggregation=aggregation)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/training/tracking/base.py",line 663,in _add_variable_with_custom_getter
**kwargs_for_getter)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer_utils.py",line 155,in make_variable
shape=variable_shape if variable_shape.rank else None)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/variables.py",line 259,in __call__
return cls._variable_v1_call(*args,**kwargs)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/variables.py",line 220,in _variable_v1_call
shape=shape)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/variables.py",line 198,in <lambda>
previous_getter = lambda **kwargs: default_variable_creator(None,**kwargs)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/variable_scope.py",line 2495,in default_variable_creator
shape=shape)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/variables.py",line 263,in __call__
return super(VariableMetaclass,cls).__call__(*args,**kwargs)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/resource_variable_ops.py",line 460,in __init__
shape=shape)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/resource_variable_ops.py",line 604,in _init_from_args
initial_value() if init_from_fn else initial_value,File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer_utils.py",line 135,in <lambda>
init_val = lambda: initializer(shape,dtype=dtype)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/init_ops.py",line 533,in __call__
shape,-limit,limit,dtype,seed=self.seed)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/random_ops.py",line 239,in random_uniform
shape = _ShapeTensor(shape)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/random_ops.py",line 44,in _ShapeTensor
return ops.convert_to_tensor(shape,dtype=dtype,name="shape")
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/ops.py",line 1087,in convert_to_tensor
return convert_to_tensor_v2(value,preferred_dtype,name)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/ops.py",line 1145,in convert_to_tensor_v2
as_ref=False)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/ops.py",line 1224,in internal_convert_to_tensor
ret = conversion_func(value,name=name,as_ref=as_ref)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/constant_op.py",line 305,in _constant_tensor_conversion_function
return constant(v,name=name)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/constant_op.py",line 246,in constant
allow_broadcast=True)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/constant_op.py",line 284,in _constant_impl
allow_broadcast=allow_broadcast))
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/tensor_util.py",line 562,in make_tensor_proto
"supported type." % (type(values),values))
TypeError: Failed to convert object of type <class 'list'> to Tensor. Contents: [Dimension(10),Dimension(128)]. Consider casting elements to a supported type.