我使用code
训练了一个卷积模型我试图获得如下预测,
import cv2
from keras.models import Sequential, load_model
import numpy as np
#create an empty frame
frames = []
#defince row, col
img_rows,img_cols,img_depth=16,16,15
cap = cv2.VideoCapture('run.avi')
fps = cap.get(5)
#Use only first 15 frames for prediction
for k in range(15):
ret, frame = cap.read()
frame=cv2.resize(frame,(img_rows,img_cols),interpolation=cv2.INTER_AREA)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
frames.append(gray)
#preprocess
input = np.array(frames)
ipt=np.rollaxis(np.rollaxis(input,2,0),2,0)
reshape_frames = np.expand_dims(ipt, axis=0)
#run prediction
model = load_model('current.h5')
preds = model.predict(reshape_frames)
print(preds)
但它会触发以下错误,
ValueError:检查时出错:预期conv3d_1_input为5 尺寸,但有阵列形状(1,16,16,15)
我怎样才能解决这个问题?
答案 0 :(得分:1)
请参阅docs for convolutional 3D layers:
输入形状
5D张量形状:(样本,通道,conv_dim1,conv_dim2,conv_dim3)如果data_format ='channels_first'或5D张量形状:(samples,conv_dim1,conv_dim2,conv_dim3,channels)如果data_format ='channels_last'。< / p>
所以最重要的是你提供给第一个转换3D图层的输入形状不符合预期的输入。
要解决此问题,您可以执行以下操作:
data_format
,如上所述)。在您的代码中查找时,您根本不使用img_depth
信息。您基本上是为3D转化网提供2D图像。