Python 自定义层中的输入形状为“无”
我正在Tensorflow 2.1中构建自己的层,并在自定义模型中使用它。然而,当我试图学习一些东西时,当第一次调用时,层试图构建自己,它需要输入形状来完成。据我所知,它应该计算它,因为它得到了一个实际的输入,但似乎输入大小是零 我的问题是:我做错了什么,如何纠正 下面我附上一个例子来重现这个问题 我的代码(MinimarNcell从tensorflow网站复制): 我得到的错误是:Python 自定义层中的输入形状为“无”,python,tensorflow,keras,tensorflow2.0,tf.keras,Python,Tensorflow,Keras,Tensorflow2.0,Tf.keras,我正在Tensorflow 2.1中构建自己的层,并在自定义模型中使用它。然而,当我试图学习一些东西时,当第一次调用时,层试图构建自己,它需要输入形状来完成。据我所知,它应该计算它,因为它得到了一个实际的输入,但似乎输入大小是零 我的问题是:我做错了什么,如何纠正 下面我附上一个例子来重现这个问题 我的代码(MinimarNcell从tensorflow网站复制): 我得到的错误是: Traceback (most recent call last): File "/home/.../tes
Traceback (most recent call last):
File "/home/.../test.py", line 64, in <module>
model.fit(x,y,epochs=10, batch_size=1)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py", line 819, in fit
use_multiprocessing=use_multiprocessing)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py", line 235, in fit
use_multiprocessing=use_multiprocessing)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py", line 593, in _process_training_inputs
use_multiprocessing=use_multiprocessing)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py", line 646, in _process_inputs
x, y, sample_weight=sample_weights)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py", line 2346, in _standardize_user_data
all_inputs, y_input, dict_inputs = self._build_model_with_inputs(x, y)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py", line 2572, in _build_model_with_inputs
self._set_inputs(cast_inputs)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py", line 2659, in _set_inputs
outputs = self(inputs, **kwargs)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer.py", line 773, in __call__
outputs = call_fn(cast_inputs, *args, **kwargs)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/autograph/impl/api.py", line 237, in wrapper
raise e.ag_error_metadata.to_exception(e)
TypeError: in converted code:
/home/.../test.py:36 call *
out=self.minimalrnn(input)
/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer.py:818 __call__
self._maybe_build(inputs)
/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer.py:2116 _maybe_build
self.build(input_shapes)
/home/.../test.py:14 build
self.kernel = self.add_weight(shape=(input_shape[-1], self.units),
TypeError: 'NoneType' object is not subscriptable
回溯(最近一次呼叫最后一次):
文件“/home/../test.py”,第64行,在
模型拟合(x,y,历次=10,批次大小=1)
文件“/home/../.venv/lib/python3.6/site packages/tensorflow_core/python/keras/engine/training.py”,第819行,以适合的形式
使用多处理=使用多处理)
文件“/home/...venv/lib/python3.6/site packages/tensorflow_core/python/keras/engine/training_v2.py”,第235行
使用多处理=使用多处理)
文件“/home/...venv/lib/python3.6/site packages/tensorflow\u core/python/keras/engine/training\u v2.py”,第593行,进程中的培训输入
使用多处理=使用多处理)
文件“/home/../.venv/lib/python3.6/site packages/tensorflow\u core/python/keras/engine/training\u v2.py”,第646行,在进程输入中
x、 y,样本重量=样本重量)
文件“/home/...venv/lib/python3.6/site packages/tensorflow\u core/python/keras/engine/training.py”,第2346行,在用户数据中
所有输入,y输入,dict输入=自我。用输入(x,y)建立模型
文件“/home/...venv/lib/python3.6/site packages/tensorflow\u core/python/keras/engine/training.py”,第2572行,在带有输入的构建模型中
自设置输入(转换输入)
文件“/home/../.venv/lib/python3.6/site packages/tensorflow\u core/python/keras/engine/training.py”,第2659行,在集合输入中
输出=自身(输入,**kwargs)
文件“/home/...venv/lib/python3.6/site packages/tensorflow\u core/python/keras/engine/base\u layer.py”,第773行,在调用中__
输出=调用fn(转换输入,*args,**kwargs)
文件“/home/...venv/lib/python3.6/site packages/tensorflow_core/python/autograph/impl/api.py”,第237行,在包装器中
将e.ag\u错误\u元数据引发到\u异常(e)
TypeError:在转换的代码中:
/home/../test.py:36呼叫*
输出=自最小RNN(输入)
/home/...venv/lib/python3.6/site packages/tensorflow\u core/python/keras/engine/base\u layer.py:818\u调用__
自我构建(输入)
/home/...venv/lib/python3.6/site packages/tensorflow\u core/python/keras/engine/base\u layer.py:2116\u maybe\u build
自我构建(输入形状)
/home/../test.py:14构建
self.kernel=self.add_weight(shape=(输入_shape[-1],self.units),
TypeError:“非类型”对象不可下标
有一个输入错误(输入
应该是输入
)。输入
是一个内置函数()
out=self.minimalrnn(输入)
应该是out=self.minimalrnn(输入)
哦,哇。我现在觉得自己真的很笨。谢谢你发现这个打字错误。它没有解决输入大小的问题,但还有另一个问题-但我认为这是单独的问题,我正在链接它以获取信息:
Traceback (most recent call last):
File "/home/.../test.py", line 64, in <module>
model.fit(x,y,epochs=10, batch_size=1)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py", line 819, in fit
use_multiprocessing=use_multiprocessing)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py", line 235, in fit
use_multiprocessing=use_multiprocessing)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py", line 593, in _process_training_inputs
use_multiprocessing=use_multiprocessing)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training_v2.py", line 646, in _process_inputs
x, y, sample_weight=sample_weights)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py", line 2346, in _standardize_user_data
all_inputs, y_input, dict_inputs = self._build_model_with_inputs(x, y)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py", line 2572, in _build_model_with_inputs
self._set_inputs(cast_inputs)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/training.py", line 2659, in _set_inputs
outputs = self(inputs, **kwargs)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer.py", line 773, in __call__
outputs = call_fn(cast_inputs, *args, **kwargs)
File "/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/autograph/impl/api.py", line 237, in wrapper
raise e.ag_error_metadata.to_exception(e)
TypeError: in converted code:
/home/.../test.py:36 call *
out=self.minimalrnn(input)
/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer.py:818 __call__
self._maybe_build(inputs)
/home/.../.venv/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer.py:2116 _maybe_build
self.build(input_shapes)
/home/.../test.py:14 build
self.kernel = self.add_weight(shape=(input_shape[-1], self.units),
TypeError: 'NoneType' object is not subscriptable
class RNNXModel(Model):
def __init__(self, size):
super(RNNXModel, self).__init__()
self.minimalrnn=MinimalRNNCell(size)
def call(self, inputs):
out=self.minimalrnn(inputs) # changed from `input`
return out