【问题标题】:Is there a way to make the of input channels in python equals to dimension of filters?有没有办法让python中的输入通道等于过滤器的维度?
【发布时间】:2019-03-23 21:11:28
【问题描述】:

我的问题是我想让python中的输入通道数等于过滤器的维度

我已经尝试过重塑,但它给了我同样的错误..因为我是 python 新手,所以我不明白如何修复我的错误 我的模型是关于将 cnn 与 lstm 层相结合,我有 2892 个训练图像和 1896 个测试图像,每个图像总共 4788 个图像,大小为 128*128

这里是我尝试过的一些代码

cnn_model = Sequential()

cnn_model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(128,128,3)))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))

cnn_model.add(Conv2D(32, (3, 3), activation='relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))

cnn_model.add(Conv2D(64, (3, 3), activation='relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))

cnn_model.add(Conv2D(128, (3, 3), activation='relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
cnn_model.add(Flatten())

model = Sequential()
model.add(TimeDistributed(cnn_model, input_shape=(1,128, 128,3)))
model.add(LSTM(16, return_sequences=True, dropout=0.5))
model.add(Dense(1, activation='softmax'))
model.compile(optimizer='adadelta', loss='categorical_crossentropy', metrics=['accuracy'])

X_data = np.array(X_data)
X_datatest = np.array(X_datatest)
X_data= X_data.astype('float32') / 255.
X_datatest = X_datatest.astype('float32') / 255.


hist=model.fit(X_data, X_data,epochs=15,batch_size=128,verbose = 2,validation_data=(X_datatest, X_datatest))

在尝试之前的代码时出现以下错误

Traceback(最近一次调用最后一次):文件 “C:\Users\bdyssm\Desktop\Master\LSTMCNN2.py”,第 219 行,在 hist=model.fit(X_data, X_data,epochs=15,batch_size=128,verbose = 2,validation_data=(X_datatest, X_datatest)) 文件 "C:\Users\bdyssm\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\engine\training.py", 第 952 行,合适 batch_size=batch_size) 文件 "C:\Users\bdyssm\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\engine\training.py", 第 751 行,在 _standardize_user_data exception_prefix='input') 文件 "C:\Users\bdyssm\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\engine\training_utils.py", 第 128 行,在 standardize_input_data 中 'with shape' + str(data_shape)) ValueError:检查输入时出错:预期 time_distributed_1_input 有 5 个维度,但得到了 形状为 (2892, 28, 28, 3) 的数组

这是模型摘要

这是 cnn_model 总结

【问题讨论】:

    标签: python-3.x keras lstm


    【解决方案1】:

    问题是您的 cnn_model 已将信号的形状更改为 128 个通道而不是 3 个颜色通道,但在声明 model 的输入形状时您没有考虑到这一点。

    cnn_model.summary() 检查cnn_model 的输出形状,并确保model 的输入形状等于cnn_model 的输出形状。

    【讨论】:

    • 不幸的是,这对我没有帮助..因为我知道你提到的问题,但我找不到解决方案或如何在 python 代码中修复它,因为我是编写 python 的新手深度学习中的代码
    • 一旦您发布 cnn_model.summary() 的输出,我可能会提供更多帮助。基于此,线 model.add(TimeDistributed(cnn_model, input_shape=(None,16,128, 128,3))) 将更改为 model.add(TimeDistributed(cnn_model, input_shape=(None,X, Y,128))) .
    • X 和 Y 是什么意思?
    • 我已经用摘要编辑了问题,并将 input_shape 更改为 input_shape=(1,128, 128,3) .. 但又给我一个错误“ValueError:检查输入时出错:预期 time_distributed_1_input 有5 维,但得到了形状为 (2892, 28, 28, 3) 的数组
    • 请为cnn_model添加摘要
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多