Python 为什么连续层在Keras中需要3维?
在尝试训练我的LSTM网络时,我收到一个错误: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
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的输出,谢谢。