Есть ли способ улучшить классификацию изображений с помощью кода 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.