2017-02-05 24 views
2

Я довольно новичок в глубоком обучении; Я хочу обучить сеть по размеру изображений (256, 256, 3), чтобы предсказать три метки пиксельной сегментации. В начале я хочу создать один сверточный слой:Deep Net с керами для сегментации изображений

model = Sequential() 
model.add(Convolution2d(32, 16, 16, input_shape=(3, 256, 256)) 

Выходной сигнал модели до сих пор представляет собой изображение с 32 каналами. Теперь я хочу добавить плотный слой, который объединяет все эти 32 канала в три канала, каждый из которых предсказывает вероятность класса для одного пикселя.

Как я могу это сделать?

+0

Что таким форматом ваших значений у? Какую форму они имеют? –

+0

(256,256); каждый пиксель получает назначение метки – user1447257

ответ

2

Самый простой способ объединить ваши 32 канала обратно 3 можно было бы добавить еще одну свертку, на этот раз с тремя фильтрами (я произвольно устанавливать размеры фильтра, чтобы быть 1x1):

model = Sequential() 
model.add(Convolution2d(32, 16, 16, input_shape=(3, 256, 256)) 
model.add(Convolution2d(3, 1, 1)) 

И, наконец, добавить функция активации для сегментации

model.add(Activation("tanh")) 

Или вы могли бы добавить все сразу, если вы хотите, чтобы с активации параметра (произвольно выбрана TANH)

model = Sequential() 
model.add(Convolution2d(32, 16, 16, input_shape=(3, 256, 256)) 
model.add(Convolution2d(3, 1, 1,activation="tanh")) 

https://keras.io/layers/convolutional/

1

Вы должны использовать расплющить между сверточными слоями и плотным слоем:

model = Sequential() 
model.add(Convolution2d(32, 16, 16, input_shape=(3, 256, 256)) 
# Do not forget to add an activation layer after your convolution layer, so here. 

model.add(Flatten()) 

model.add(Dense(3)) 
model.add(Activation("sigmoid")) # whatever activation you want.