层顺序的输入 0 与预期的 ndim=3 层不兼容,发现 ndim=2.收到完整形状:[无,1] [英] Input 0 of layer sequential is incompatible with the layer expected ndim=3, found ndim=2. Full shape received: [None, 1]

查看:45
本文介绍了层顺序的输入 0 与预期的 ndim=3 层不兼容,发现 ndim=2.收到完整形状:[无,1]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 keras 进行文本分类.预处理和矢量化后,我的训练和验证数据详细信息如下所示:

print(X_train.shape, ',', X_train.ndim, ',', type(X_train))打印(y_train.shape, ',', y_train.ndim, ',', type(y_train))打印(X_valid.shape,',',X_valid.ndim,',',类型(X_valid))打印(y_valid.shape,',',y_valid.ndim,',',类型(y_valid))打印(data_dim)

输出为:

(14904,) , 1 , (14904,) , 1 , (3725,) ,​​ 1 , (3725,) ,​​ 1 , 15435

那么模型定义是:

model = Sequential()model.add(LSTM(100, input_shape=(data_dim,1), return_sequences=True))模型.添加(辍学(0.2))模型.添加(LSTM(200))模型.添加(辍学(0.2))model.add(Dense(1, activation='sigmoid'))model.compile(loss='binary_crossentropy', optimizer='adam', metrics = ['accuracy'])模型摘要()

模型总结:

模型拟合:

model.fit(X_train,y_train, validation_data = (X_valid, y_valid),batch_size=batch_size, epochs=epochs)

为什么会出现这个错误?

---->1 model.fit(X_train,y_train, validation_data = (X_valid, y_valid),2 batch_size=batch_size, epochs=epochs)......ValueError: 层顺序的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2.收到完整形状:[无,1]

解决方案

我终于在
现在没有问题,model.fit 执行得很好.

I am working with keras for text classification. After pre-processing and vectorization my train and validation data details is like bellow:

print(X_train.shape, ',', X_train.ndim, ',', type(X_train))
print(y_train.shape, ',', y_train.ndim, ',', type(y_train))
print(X_valid.shape, ',', X_valid.ndim, ',', type(X_valid))
print(y_valid.shape, ',', y_valid.ndim, ',', type(y_valid))
print(data_dim)

output is:

(14904,) , 1 , <class 'numpy.ndarray'>
(14904,) , 1 , <class 'numpy.ndarray'>
(3725,) , 1 , <class 'numpy.ndarray'>
(3725,) , 1 , <class 'numpy.ndarray'>
15435

then model definition is:

model = Sequential()
model.add(LSTM(100, input_shape=(data_dim,1 ), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(200))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics = ['accuracy'])
model.summary()

model summury:

model fitting:

model.fit(X_train,y_train, validation_data = (X_valid, y_valid),
          batch_size=batch_size, epochs=epochs)

Why does this error occur?

----> 1 model.fit(X_train,y_train, validation_data = (X_valid, y_valid),
      2           batch_size=batch_size, epochs=epochs)
...
...

    ValueError: Input 0 of layer sequential is incompatible with the layer:
              expected ndim=3, found ndim=2. Full shape received: [None, 1]

解决方案

I finally overcame the problem with the help of this kaggle notebook.

I change data dimensions to:

print(X_train.shape)
print(y_train.shape)
print(X_valid.shape)
print(y_valid.shape)
print(X_test.shape)
print(y_test.shape)
print(data_dim)
########################## output ###########################
(14904, 15435)
(14904,)
(3725, 15435)
(3725,)
(5686, 15435)
(5686,)
15435

and then reshape data to:

X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
X_valid = np.reshape(X_valid, (X_valid.shape[0], 1, X_valid.shape[1]))
X_test = np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1]))
########################## output ###########################
(14904, 1, 15435)
(3725, 1, 15435)
(5686, 1, 15435)

finally change LSTM input_shape to:

model.add(LSTM(units=50, input_shape=(1, data_dim), return_sequences=True))

now, model summary is:


There is no problem right now and model.fit executes fine.

这篇关于层顺序的输入 0 与预期的 ndim=3 层不兼容,发现 ndim=2.收到完整形状:[无,1]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆