预测时的尺寸误差

时间:2017-10-21 07:47:10

标签: python opencv neural-network keras

我使用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)

我怎样才能解决这个问题?

1 个答案:

答案 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图像。
  • 使用2D convnet并创建新模型