程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了不断收到错误:lstm_8 层的输入 0 与该层不兼容:预期 ndim=3,发现 ndim=4。收到完整形状:(无、94、94、32)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决不断收到错误:lstm_8 层的输入 0 与该层不兼容:预期 ndim=3,发现 ndim=4。收到完整形状:(无、94、94、32)?

开发过程中遇到不断收到错误:lstm_8 层的输入 0 与该层不兼容:预期 ndim=3,发现 ndim=4。收到完整形状:(无、94、94、32)的问题如何解决?下面主要结合日常开发的经验,给出你关于不断收到错误:lstm_8 层的输入 0 与该层不兼容:预期 ndim=3,发现 ndim=4。收到完整形状:(无、94、94、32)的解决方法建议,希望对你解决不断收到错误:lstm_8 层的输入 0 与该层不兼容:预期 ndim=3,发现 ndim=4。收到完整形状:(无、94、94、32)有所启发或帮助;

我正在尝试使用 LSTM 模型进行字母分类。输入是 96x96 大小的二进制图像

第一步是加载数据

DATADIR = '/content/drive/MyDrive/Mihir_etal_Assamese_Dataset/DATASET_1'

CATEGORIES = ['1','2','3','4','5']

kernel=np.ones((2,2),np.int8)
Training_data = []

for category in CATEGORIES:
    path = os.path.join(DATADIR,category)
    label = CATEGORIEs.index(category)
    for img in os.Listdir(path):
        img_array = cv2.imread(os.path.join(path,img),cv2.IMREAD_GRAYSCALE)
        
        ret,img_array = cv2.threshold(img_array,255,cv2.THRESH_OTSU)
                
        gray = 255*(img_array < 128).astype(np.uint8) 
        coords = cv2.findNonZero(gray) # Find all zero points (text)
        x,y,w,h = cv2.boundingRect(coords)
        img_array = graY[y:y+h,x:x+w] # Crop the image 
        img_array = 255*(img_array < 128).astype(np.uint8)
        img_array = cv2.resize(img_array,(96,96),)
        
        Training_data.append([img_array,label])

然后将我的训练数据列表转换为 X,y 数组用于模型输入

X = []
y = []

for data,label in Training_data:
   X.append(data)
   y.append(label)

X= np.array(X).reshape(-1,96,1)  
y= np.array(y)

然后拆分数据集

from sklearn.model_SELEction import Train_test_split

X_Train,X_test,y_Train,y_test = Train_test_split(X,test_size=0.2)

构建我的模型

from keras import Sequential

LSTM = tf.keras.layers.LSTM
Dropout = tf.keras.layers.Dropout
Dense = tf.keras.layers.Dense
Conv2D = tf.keras.layers.Conv2D

model = Sequential()
model.add(Conv2D(32,(3,3),input_shape = X_Train.shape[:1]))
model.add(LSTM(32))
model.add(Dropout(0.5))
model.add(LSTM(50,return_sequences=TruE))
model.add(Dropout(0.5))
model.add(LSTM(50,return_sequences=TruE))
model.add(Dropout(0.5))
model.add(LSTM(50))
model.add(Dropout(0.5))
model.add(Dense(5,activation='softmax'))

我尝试了各种解决方案,但我的模型输入中的尺寸一直不匹配。尝试删除添加 Conv2D 层,但没有任何区别。还是一样的错误

解决方法

好的,我@R_801_9713@。在使用多个 LSTM 层时,您必须为除最后一层之外的所有层添加 return_sequence= True 以便每一层都能获得正确的输入。

大佬总结

以上是大佬教程为你收集整理的不断收到错误:lstm_8 层的输入 0 与该层不兼容:预期 ndim=3,发现 ndim=4。收到完整形状:(无、94、94、32)全部内容,希望文章能够帮你解决不断收到错误:lstm_8 层的输入 0 与该层不兼容:预期 ndim=3,发现 ndim=4。收到完整形状:(无、94、94、32)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。