Керас выдает ошибку при построении фиктивной модели - PullRequest
0 голосов
/ 19 июня 2019

Я строю крошечную модель 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'

Спасибо всем. Бест, Умберто

1 Ответ

2 голосов
/ 19 июня 2019

Кажется, вы забыли поставить скобки в kernel size в ваших слоях Conv2D. Чтобы сделать их с шагом больше 1. Причиной того, что тензоры становятся слишком маленькими для (2, 2) объединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...