Есть ли способ улучшить классификацию изображений с помощью кода lenet?

Я использовал код в http://deeplearning.net/tutorial/lenet.html и изменил

   layer0 = LeNetConvPoolLayer(
    rng,
    input=layer0_input,
    image_shape=(batch_size, 1, 28, 28),
    filter_shape=(nkerns[0], 1, 5, 5),
    poolsize=(2, 2)
)
layer1 = LeNetConvPoolLayer(
    rng,
    input=layer0.output,
    image_shape=(batch_size, nkerns[0], 12, 12),
    filter_shape=(nkerns[1], nkerns[0], 5, 5),
    poolsize=(2, 2)
layer2_input = layer1.output.flatten(2)

# construct a fully-connected sigmoidal layer
layer2 = HiddenLayer(
    rng,
    input=layer2_input,
    n_in=nkerns[1] * 4 * 4,
    n_out=500,
    activation=T.tanh
)
layer3 = LogisticRegression(input=layer2.output, n_in=500, n_out=10)

в

layer0 = LeNetConvPoolLayer(
    rng,
    input=layer0_input,
    image_shape=(batch_size, 3, 256, 256),
    filter_shape=(nkerns[0], 3, 57, 57),
    poolsize=(2, 2)
)
layer1 = LeNetConvPoolLayer(
    rng,
    input=layer0.output,
    image_shape=(batch_size, nkerns[0], 100, 100),
    filter_shape=(nkerns[1], nkerns[0], 57, 57),
    poolsize=(2, 2)
)
layer2_input = layer1.output.flatten(2)

# construct a fully-connected sigmoidal layer
layer2 = HiddenLayer(
    rng,
    input=layer2_input,
    n_in=nkerns[1] * 22 * 22,
    n_out=900,
    activation=T.tanh
)

# classify the values of the fully-connected sigmoidal layer
layer3 = LogisticRegression(input=layer2.output, n_in=900, n_out=6)

Я поместил числа в image_shape по моему собственному мнению. Но результат этого кода был довольно ужасным, и я предполагаю, что есть проблема в слое. Поэтому я пытаюсь классифицировать изображения с новым кодом, который добавил

layer3_input = layer2.output.flatten(2)

layer3 = HiddenLayer(
    rng,
    input=layer3_input,
    n_in=900,
    n_out=400,
    activation=T.tanh
)

В любом случае, есть ли лучший способ улучшить уровень классификации путем изменения кода?

Кроме того, я хочу знать правильное количество слоев для классификации изображений. Пожалуйста, помогите мне GG

1 ответ

Во-первых, пожалуйста, следуйте руководству по стилю в соответствии с указаниями Ричарда Эриксона и Саймона Андре Форсберга выше.

Хотя я не понимаю вашего вопроса ясно, я, кажется, понимаю, откуда вы. Во-первых, ваша архитектура не выглядит так уж хорошо. На мой взгляд, иметь только два слоя CNN для входного размера изображения 256 на 256 слишком мало. Вы должны прочитать много литературы и придумать (или хотя бы попробовать) несколько архитектур. Я предлагаю начать со знаменитой статьи 2012 года.

Вы также можете подумать об ускорении или улучшении ваших методов обучения. Я предлагаю начать с импульса Поляка и перейти к ускоренным градиентам Нестерова. Для CNN они, кажется, дают более быструю и лучшую конвергенцию. Также попробуйте учиться с помощью Adagrad или RMSProp.

Другие вопросы по тегам