Python ValueError:层sequential_37的输入0与层不兼容:预期ndim=3,发现ndim=2。收到完整形状:[无,15]

Python ValueError:层sequential_37的输入0与层不兼容:预期ndim=3,发现ndim=2。收到完整形状:[无,15],python,tensorflow,keras,deep-learning,lstm,Python,Tensorflow,Keras,Deep Learning,Lstm,我已经尽了我所知的一切努力。 此外,输入的所有组合_dim=15已经存在。如果有人能帮我 print(x_train.shape) print(y_train.shape) print(x_test.shape) print(y_test.shape) (233941,15) (233941,1) (100261、15) (100261,) 我已经使用input_dim=(233941,15)和input_dim=(233941,1)完成了测试。但我还是找不到问题。 我的问题可能在数据集部分吗

我已经尽了我所知的一切努力。 此外,输入的所有组合_dim=15已经存在。如果有人能帮我

print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)
(233941,15)

(233941,1)

(100261、15)

(100261,)

我已经使用input_dim=(233941,15)和input_dim=(233941,1)完成了测试。但我还是找不到问题。 我的问题可能在数据集部分吗

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dense, Dropout, LSTM
model = Sequential()
model.add(LSTM(100, input_dim=15, return_sequences=True))
model.add(Dropout(0.3))

model.add(LSTM(50, return_sequences = True))
model.add(Dropout(0.3))
#3 camada
model.add(LSTM(50, return_sequences = True))
model.add(Dropout(0.3))

model.add(LSTM(units = 50))
model.add(Dropout(0.3))

model.add(Dense(1, activation='sigmoid'))

# Compile model
model.compile(optimizer = 'adam', loss = 'mean_squared_error',
                  metrics = ['mean_absolute_error'])
# Fit the model
model.fit(x_train,y_train,epochs=100, validation_data=(x_test,y_test))
纪元1/100
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
21指标=[“平均绝对误差])
22#适合模型
--->23模型拟合(x_序列,y_序列,历元=100,验证数据=(x_检验,y_检验))
10帧
/包装器中的usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py(*args,**kwargs)
971例外情况为e:#pylint:disable=broad except
972如果hasattr(e,“AGU错误元数据”):
-->973将e.ag\u错误\u元数据引发到\u异常(e)
974其他:
975提高
ValueError:在用户代码中:
/usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/training.py:806 train_函数*
返回步骤_函数(self、迭代器)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:796-step_函数**
输出=模型。分配策略。运行(运行步骤,参数=(数据,)
/usr/local/lib/python3.6/dist包/tensorflow/python/distribute/distribute_lib.py:1211运行
返回self.\u扩展。为每个\u副本调用\u(fn,args=args,kwargs=kwargs)
/usr/local/lib/python3.6/dist包/tensorflow/python/distribute/distribute_lib.py:2585调用每个副本
返回自我。为每个副本(fn、ARG、kwargs)调用
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute\u-lib.py:2945\u为每个复制副本调用
返回fn(*args,**kwargs)
/usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/training.py:789运行步骤**
输出=型号列车步进(数据)
/usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/training.py:747 train_步骤
y_pred=self(x,training=True)
/usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/base\u layer.py:976\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_37的输入0与层不兼容:预期ndim=3,发现ndim=2。收到完整形状:[无,15]

正如Marco Certliani在评论中提到的,您需要为RNN正确设置输入格式,因为您提到的错误是三维的

以下是输入张量的表示形式:


这意味着您的3D张量的形状为(批量大小、时间步长、输入维度)。

您必须排列数据以适应RNN。。。您的输入必须是三维的,而目前它只是二维的
Epoch 1/100
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-79-2e6c4d489e38> in <module>()
     21                   metrics = ['mean_absolute_error'])
     22 # Fit the model
---> 23 model.fit(x_train,y_train,epochs=100, validation_data=(x_test,y_test))

10 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
    971           except Exception as e:  # pylint:disable=broad-except
    972             if hasattr(e, "ag_error_metadata"):
--> 973               raise e.ag_error_metadata.to_exception(e)
    974             else:
    975               raise

ValueError: in user code:

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:806 train_function  *
        return step_function(self, iterator)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:796 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:1211 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:2585 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:2945 _call_for_each_replica
        return fn(*args, **kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:789 run_step  **
        outputs = model.train_step(data)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:747 train_step
        y_pred = self(x, training=True)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:976 __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_37 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 15]