Керас с тензорным потоком Conv net с переменным входным размером - PullRequest
2 голосов
/ 11 июня 2019

Я использую Python 3 с Anaconda и Keras с более тензорным потоком. Моя цель - создать сеть со слоем Conv переменного размера ввода

Я нашел здесь , чтобы использовать этокод

i = Input((None, None, 1))
o = Conv2D(1, 3, 3)(i)
model = Model(i, o)
model.compile('sgd', 'mse')

Я использовал его для создания собственной модели с этим кодом (мне нужен плоский слой)

model = Sequential()
I = Input((None, None, 1))
c = Conv2D(filters=1, kernel_size=(1, 1))(I)
f = Flatten()(c)
o = Dense(10, activation="softmax")(f)
m = Model(I, o)
m.compile(loss=categorical_crossentropy, optimizer=SGD(), metrics=["accuracy"])

И я продолжаю получать эту ошибку

ValueError: Форма ввода для "Flatten" не полностью определена (получено (None, None, 1). Убедитесь, что передали полный аргумент "input_shape" или "batch_input_shape" первому слою в вашей модели).

Похоже, проблема связана с формой ввода для слоя Flatten. Когда я его удаляю, все нормально.

Как заставить его хорошо играть с переменным размером?

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Я думаю, что проблема связана с вашей переменной input_sizes. Здесь говорится, что вы не можете изменять input_sizes, если вы используете полностью подключенный слой. См .: Как тренировать изображения, когда они имеют разный размер?

0 голосов
/ 11 июня 2019

Метод Flatten не принимает входной размер в качестве аргумента.

model = Sequential()
I = Input((None, None, 1))
c = Conv2D(filters=1, kernel_size=(1, 1))(I)
f = Flatten()
o = Dense(10, activation="softmax")(I)
m = Model(I, o)
m.compile(loss="categorical_crossentropy", optimizer=SGD(), metrics=["accuracy"])

Это должно решить вашу проблему.

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