Python 自定义层中的输入形状为“无”

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

我正在Tensorflow 2.1中构建自己的层,并在自定义模型中使用它。然而,当我试图学习一些东西时,当第一次调用时,层试图构建自己,它需要输入形状来完成。据我所知,它应该计算它,因为它得到了一个实际的输入,但似乎输入大小是零

我的问题是:我做错了什么,如何纠正

下面我附上一个例子来重现这个问题

我的代码(MinimarNcell从tensorflow网站复制):

我得到的错误是:

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