Python 为什么连续层在Keras中需要3维?

Python 为什么连续层在Keras中需要3维?,python,tensorflow,keras,lstm,recurrent-neural-network,Python,Tensorflow,Keras,Lstm,Recurrent Neural Network,在尝试训练我的LSTM网络时,我收到一个错误:ValueError:层sequential_2的输入0与层不兼容:预期的ndim=3,发现的ndim=2。收到完整形状:[无,无] 我的代码如下: import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers numFeatures = 26; #amino acids numClasses = 64; #codons x_test

在尝试训练我的LSTM网络时,我收到一个错误:
ValueError:层sequential_2的输入0与层不兼容:预期的ndim=3,发现的ndim=2。收到完整形状:[无,无]

我的代码如下:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

numFeatures = 26; #amino acids
numClasses = 64; #codons
x_test = tf.ragged.constant(XTest)
y_train = tf.ragged.constant(YTrain)
y_test = tf.ragged.constant(YTest)
x_train = tf.ragged.constant(XTrain)

model = keras.Sequential(
    [
        keras.Input(shape=(26, 10), ragged=True),
        layers.LSTM(128,use_bias=False),
        layers.Dense(10, activation="softmax")
    ]
)

model.compile(
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    optimizer="adam",
    metrics=["accuracy"]
)
model.fit(
    x_train, y_train, validation_data=(x_test, y_test), batch_size=5, epochs=1
)
model.summary()向我展示了以下内容:

Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_2 (LSTM)                (None, 128)               70656     
_________________________________________________________________
dense_2 (Dense)              (None, 10)                1290      
=================================================================
Total params: 71,946
Trainable params: 71,946
Non-trainable params: 0
_________________________________________________________________
我得到以下错误:

---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-11-ae3b9eb7daa0> in <module>()
     15 )
     16 model.fit(
---> 17     x_train, y_train, validation_data=(x_test, y_test), batch_size=5, epochs=1
     18 )

/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
    966           except Exception as e:  # pylint:disable=broad-except
    967             if hasattr(e, "ag_error_metadata"):
--> 968               raise e.ag_error_metadata.to_exception(e)
    969             else:
    970               raise

ValueError: in user code:

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:571 train_function  *
        outputs = self.distribute_strategy.run(
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:951 run  **
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2290 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2649 _call_for_each_replica
        return fn(*args, **kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:531 train_step  **
        y_pred = self(x, training=True)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:886 __call__
        self.name)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/input_spec.py:180 assert_input_compatibility
        str(x.shape.as_list()))

    ValueError: Input 0 of layer sequential_2 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, None]
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
15 )
16.5型号(
--->17 x_序列,y_序列,验证_数据=(x_测试,y_测试),批量大小=5,时代=1
18 )
/包装器中的usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py(*args,**kwargs)
966例外情况为e:#pylint:disable=broad Exception
967如果hasattr(e,“ag\u错误\u元数据”):
-->968将e.ag\u错误\u元数据引发到\u异常(e)
969其他:
970加薪
ValueError:在用户代码中:
/usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/training.py:571 train_函数*
输出=self.distribution\u strategy.run(
/usr/local/lib/python3.6/dist包/tensorflow/python/distribute/distribute_lib.py:951运行**
返回self.\u扩展。为每个\u副本调用\u(fn,args=args,kwargs=kwargs)
/usr/local/lib/python3.6/dist包/tensorflow/python/distribute/distribute_lib.py:2290为每个复制副本调用
返回自我。为每个副本(fn、ARG、kwargs)调用
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute\u-lib.py:2649\u为每个复制副本调用
返回fn(*args,**kwargs)
/usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/training.py:531 train\u步骤**
y_pred=self(x,training=True)
/usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/base\u layer.py:886\u调用__
(姓名)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/input\u spec.py:180断言\u输入\u兼容性
str(x.shape.as_list())
ValueError:层sequential_2的输入0与层不兼容:预期ndim=3,发现ndim=2。收到完整形状:[无,无]

您被“层顺序9”弄糊涂了,这是层的名称,而不是顺序模型的名称。我认为它是指您的LSTM,请使用model.summary()进行确认。所以问题是,如果没有设置输入长度,嵌入会产生2D输出,而LSTM需要3D输入。啊,@Snoopy博士,可能就是这样。我会调查的,谢谢!Hmm,@Dr.Snoopy,model.summary()显示模型名称为sequential_9,错误仍然为ValueError:层sequential_9的输入0与层不兼容:预期ndim=3,发现ndim=2。收到完整形状:[无,无]然后包括完整回溯和model.summary()@Dr.Snoopy的输出,谢谢。您被“层顺序_9”弄糊涂了,这是层的名称,而不是顺序模型的名称。我认为它是指您的LSTM,请使用model.summary()进行确认。所以问题是,如果没有设置输入长度,嵌入会产生2D输出,而LSTM需要3D输入。啊,@Snoopy博士,可能就是这样。我会调查的,谢谢!Hmm,@Dr.Snoopy,model.summary()显示模型名称为sequential_9,错误仍然为ValueError:层sequential_9的输入0与层不兼容:预期ndim=3,发现ndim=2。收到完整形状:[无,无]然后包括完整回溯和model.summary()@Dr.Snoopy的输出,谢谢。