Python CONVLSTM2D输入形状

Python CONVLSTM2D输入形状,python,numpy,Python,Numpy,共有1275幅图像,尺寸为(128,19,3),这些图像以(255,5,128,19,3)的形状形成,以馈送CONVLSM2D模型。通过运行下面的代码,我得到了这个错误。如果有人能帮忙,谢谢 错误: ValueError:检查目标时出错:预期conv3d_15具有形状(None,128,19,1),但获得具有形状(5,128,19,3)的数组 #导入库 #------------------------------------------------- 导入glob 从PIL导入图像 导入ten

共有1275幅图像,尺寸为(128,19,3),这些图像以(255,5,128,19,3)的形状形成,以馈送CONVLSM2D模型。通过运行下面的代码,我得到了这个错误。如果有人能帮忙,谢谢

错误:

ValueError:检查目标时出错:预期conv3d_15具有形状(None,128,19,1),但获得具有形状(5,128,19,3)的数组

#导入库
#-------------------------------------------------
导入glob
从PIL导入图像
导入tensorflow作为tf
导入tensorflow作为tf
从keras.models导入顺序
从keras.layers导入卷积2D
从keras.layers导入MaxPoolig2D
从keras.layers导入展平
从keras.layers导入稠密
来自keras.layers.voluminal_ConvLSTM2D
从keras.layers.normalization导入批处理normalization
来自keras.layers.covolative导入Conv3D
#数据预处理
#-----------------------------------------------------------------
将numpy作为np导入
导入操作系统
进口cv2
s=np.zero((255,5128,19,3),dtype=np.uint8)
图像\u文件夹='D:\\thesis\\Paper 3\\Feature Extraction\\two\u dimension\u Feature\u Extraction\\stft\u Feature\\Training\u set\\P300'
images=[img代表os.listdir(image_文件夹)中的img,如果img.endswith(“.png”)]
#frame_5=cv2.imread(os.path.join(image_文件夹,images[5]))
对于图像中的图像:
frame=cv2.imread(os.path.join(image\u文件夹,image))
对于范围(0254)内的i:
对于范围(0,4)内的j:
s[i,j]=帧
labels=np.zero((2,len+1),dtype=int)
标签=np.转置(标签)
长度=长度/2
长度=整数(长度)
对于范围(0255)内的i:
如果我是127:
标签[i][1]=1
#配置网络
#--------------------------------------------------------------------------------------------------------------------------
seq=Sequential()
seq.add(ConvLSTM2D(过滤器=40,内核大小=(3,3),
输入_形状=(无、128、19、3),
padding='same',返回(序列=True))
seq.add(BatchNormalization())
seq.add(ConvLSTM2D(过滤器=40,内核大小=(3,3),
padding='same',返回(序列=True))
seq.add(BatchNormalization())
seq.add(ConvLSTM2D(过滤器=40,内核大小=(3,3),
padding='same',返回(序列=True))
seq.add(BatchNormalization())
seq.add(ConvLSTM2D(过滤器=40,内核大小=(3,3),
padding='same',返回(序列=True))
seq.add(BatchNormalization())
seq.add(Conv3D(过滤器=1,内核大小=(3,3,3),
激活=乙状结肠',
padding='same',data\u format='channels\u last'))
#编辑CNN
#--------------------------------------------------------------------------------------------
seq.compile(loss='binary\u crossentropy',optimizer='adadelta')
#符合模型
#--------------------------------------------------------------------------------------
列车数据=s[:127]
测试数据=s[128:254]
历史=序列拟合(序列数据、测试数据、历次=10、批次大小=10)
#将结果形象化
#---------------------------------------------------------------------------------------
将matplotlib.pyplot作为plt导入
acc=历史。历史['acc']
val_acc=历史。历史['val_acc']
损失=历史。历史['loss']
val_loss=历史。历史['val_loss']
历元=范围(1,透镜(acc)+1)
plt.绘图(时代、科目、r、标签、培训科目)
plt.绘图(历代,val_acc,'b',label='Validation acc')
产品名称(“培训和验证准确性”)
plt.legend()
plt.图()
plt.plot(时代、损失、“r”、标签=“培训损失”)
plt.绘图(年代、价值损失、“b”、标签=”验证损失“)
产品名称(“培训和验证损失”)
plt.plot()
plt.legend()
plt.show()
测试损失、测试依据=顺序评估(测试数据)
打印(“测试依据:”,测试依据)
调用参数输入:5D张量。(样本、时间、行、列、通道)=(无、5、128、19、3),
#Importing libraries
#-------------------------------------------------

import glob
from PIL import Image
import tensorflow as tf
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
from keras.layers.convolutional_recurrent import ConvLSTM2D
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import Conv3D

#Data Preprocessing
#-----------------------------------------------------------------

import numpy as np
import os
import cv2

s = np.zeros((255,5,128,19,3),dtype=np.uint8)
image_folder = 'D:\\thesis\\Paper 3\\Feature Extraction\\two_dimension_Feature_extraction\\stft_feature\\Training_set\\P300'
images = [img for img in os.listdir(image_folder) if img.endswith(".png")]
#frame_5 = cv2.imread(os.path.join(image_folder, images[5]))
for image in images:
    frame = cv2.imread(os.path.join(image_folder, image))
    for i in range(0, 254):
        for j in range(0, 4):
            s[i,j] = frame
labels = np.zeros((2,len(s) + 1), dtype=int)
labels = np.transpose(labels)
length = len(s)/2
length = int(length)
for i in range(0, 255):
    if i <= 127:
        labels[i][0] = 1
    elif i > 127 :
        labels[i][1] = 1


    
            
#Config Network
#--------------------------------------------------------------------------------------------------------------------------
seq = Sequential()
seq.add(ConvLSTM2D(filters=40, kernel_size=(3, 3),
                   input_shape=(None, 128, 19, 3),
                   padding='same', return_sequences=True))
seq.add(BatchNormalization())

seq.add(ConvLSTM2D(filters=40, kernel_size=(3, 3),
                   padding='same', return_sequences=True))
seq.add(BatchNormalization())

seq.add(ConvLSTM2D(filters=40, kernel_size=(3, 3),
                   padding='same', return_sequences=True))
seq.add(BatchNormalization())

seq.add(ConvLSTM2D(filters=40, kernel_size=(3, 3),
                   padding='same', return_sequences=True))
seq.add(BatchNormalization())

seq.add(Conv3D(filters=1, kernel_size=(3, 3, 3),
               activation='sigmoid',
               padding='same', data_format='channels_last'))


#Compiling the CNN
#--------------------------------------------------------------------------------------------
seq.compile(loss='binary_crossentropy', optimizer='adadelta')

#Fit the Model
#--------------------------------------------------------------------------------------
train_data = s[:127]
test_data = s[128:254]

history = seq.fit(train_data, test_data, epochs = 10, batch_size = 10)

#Visualize the Result
#---------------------------------------------------------------------------------------
import matplotlib.pyplot as plt
acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(1, len(acc) + 1)
plt.plot(epochs, acc, 'r', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()
plt.figure()
plt.plot(epochs, loss, 'r', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.plot()
plt.legend()
plt.show()

test_loss, test_acc = seq.evaluate(test_data)
print('test_acc:', test_acc)