0

我正在 Keras 中构建微型 yolo cnn 模型。我收到一个奇怪的错误。任何人都可以帮忙吗?

进口

import numpy as np
import matplotlib.pyplot as plt
import cv2
import glob
#from moviepy.editor import VideoFileClip
from IPython.display import HTML
%matplotlib inline

from tensorflow.keras import backend as K

import tensorflow.keras as keras# broken for keras >= 2.0, use 1.2.2
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Convolution2D, MaxPooling2D
from tensorflow.keras.layers import LeakyReLU
from tensorflow.keras.layers import Flatten, Dense, Activation, Reshape

型号代码如下

K.set_image_data_format('channels_first')
model = Sequential()
model.add(Convolution2D(16, 3, 3,input_shape=(3,448,448),padding='same'))#,strides=(1,1)))
model.add(LeakyReLU(alpha=0.1))
model.add(MaxPooling2D(pool_size=(2, 2))) # Added the padding option
model.add(Convolution2D(32,3,3 ,padding='same'))
model.add(LeakyReLU(alpha=0.1))
model.add(MaxPooling2D(pool_size=(2, 2),padding='valid'))
model.add(Convolution2D(64,3,3 ,padding='same'))
model.add(LeakyReLU(alpha=0.1))
model.add(MaxPooling2D(pool_size=(2, 2),padding='valid'))
model.add(Convolution2D(128,3,3 ,padding='same'))
model.add(LeakyReLU(alpha=0.1))
model.add(MaxPooling2D(pool_size=(2, 2),padding='valid'))
model.add(Convolution2D(256,3,3 ,padding='same'))
model.add(LeakyReLU(alpha=0.1))
model.add(MaxPooling2D(pool_size=(2, 2),padding='valid'))
model.add(Convolution2D(512,3,3 ,padding='same'))
model.add(LeakyReLU(alpha=0.1))
model.add(MaxPooling2D(pool_size=(2, 2),padding='valid'))
model.add(Convolution2D(1024,3,3 ,padding='same'))
model.add(LeakyReLU(alpha=0.1))
model.add(Convolution2D(1024,3,3 ,padding='same'))
model.add(LeakyReLU(alpha=0.1))
model.add(Convolution2D(1024,3,3 ,padding='same'))
model.add(LeakyReLU(alpha=0.1))
model.add(Flatten())
model.add(Dense(256))
model.add(Dense(4096))
model.add(LeakyReLU(alpha=0.1))
model.add(Dense(1470))

问题如下。如果我运行它,我会收到以下错误消息

---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
~/Python-Environments/tfenv/lib/python3.7/site-packages/tensorflow/python/framework/ops.py in _create_c_op(graph, node_def, inputs, control_inputs)
   1658   try:
-> 1659     c_op = c_api.TF_FinishOperation(op_desc)
   1660   except errors.InvalidArgumentError as e:

InvalidArgumentError: Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_37/MaxPool' (op: 'MaxPool') with input shapes: [?,128,1,1].

我找不到原因。任何人都可以复制它吗?Keras 版本是

'2.2.4-tf'

谢谢任何人。最好的,翁贝托

4

1 回答 1

2

似乎您忘记kernel size在您的 Conv2D 图层中添加括号。使它们的步幅大于 1。导致张量变得太小而无法进行 (2, 2) 池化。

于 2019-06-19T10:01:57.080 回答