微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将3d张量馈入CNN和keras网络时的尺寸错误

如何解决将3d张量馈入CNN和keras网络时的尺寸错误

我的Xtrain是尺寸为(numofsamples,高度,宽度,通道)的RGB图像。 其中numofsamples = 1047,高度= 128,宽度= 128,通道= 3。

这是通过运行以下代码完成的:

for img_filename in train_files:
    img = image.load_img(os.path.join(rootdir,'train_image/train_image',img_filename),target_size=(128,128,1))
    img = image.img_to_array(img)
    img = img/255
    train_image.append(img)
X_train = np.array(train_image)

我正在尝试对具有图像增强功能的数据运行CNN + LSTM模型。但是我不断收到不同尺寸的错误

  1. 如果我要运行以下代码
batch_size = 64
model.add(Timedistributed(Conv2D(64,kernel_size=(3,3),activation='relu',input_shape = (128,3))))
model.add(Timedistributed(MaxPooling2D(pool_size=(2,2))))
model.add(Timedistributed(Flatten()))
model.add(LSTM(512,return_sequences=False,dropout=0.1))
model.add(Flatten())
model.add(Dense(256))
model.add(Dense(3,activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy'])
model.fit_generator(train_generator.flow(Xtrain,ytrain,batch_size=batch_size),#steps_per_epoch = Xtrain.shape[0] // batch_size,epochs = 50,verbose = True,validation_data= (Xval,yval),callbacks = [reduce_lr,es,ModelCheckpoint('cnnlstm'+'_weights.hdf5',monitor='val_accuracy',verbose=1,save_best_only=True,mode='max')]
                       )

我遇到的错误是:

InvalidArgumentError:输入必须为4维[8192,3] [Op:Conv2D]

如果我将其重塑为(1047,128,128,3,1),我会遇到一个错误

Xtrain_reshape = np.expand_dims(Xtrain,-1)
Xval_reshape = np.expand_dims(Xval,-1)

model = Sequential()
# define CNN model
model.add(Timedistributed(Conv2D(64,2))))
model.add(Timedistributed(Flatten()))
# define LSTM model
model.add(LSTM(512,metrics=['accuracy'])
model.fit_generator(train_generator.flow(Xtrain_reshape,validation_data= (Xval_reshape,mode='max')]
                       )

我的错误

ValueError :(“ NumpyArrayIterator中的输入数据应具有等级4。您传递了一个具有形状的数组”,(1047、128、128、3、1))

您能告诉我如何重塑它,以便我可以通过CNN和LSTM吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。