У меня есть набор данных, состоящий из 2 изображений для наблюдения.Изображения имеют форму (1, 128, 118), они представляют собой изображения в градациях серого, и для этой задачи существует 11 классов.Что лучше всего использовать с CNN с такими данными?Как я могу оптимально определить, например, количество слоев моего CNN, заполнение или нет, форму шага, сколько слоев пула я должен использовать?Лучшее максимальное объединение или среднее объединение?
Это фактическая конфигурация моей модели:
def create_model(features):
with C.layers.default_options(init=C.glorot_uniform(), activation=C.ops.relu, pad= True):
h = features
h = C.layers.Convolution2D(filter_shape = (5,5),
num_filters=8, strides = (2,2),
pad=True, name = 'first_conv')(h)
h = C.layers.AveragePooling(filter_shape = (5,5), strides=(2,2))(h)
h = C.layers.Convolution2D(filter_shape = (5,5), num_filters=16, pad = True)(h)
h = C.layers.AveragePooling(filter_shape = (5,5), strides=(2,2))(h)
h = C.layers.Convolution2D(filter_shape = (5,5), num_filters=32, pad = True)(h)
h = C.layers.AveragePooling(filter_shape = (5,5), strides=(2,2))(h)
h = C.layers.Dense(96)(h)
h = C.layers.Dropout(dropout_rate=0.5)(h)
r = C.layers.Dense(num_output_classes, activation= None, name='classify')(h)
return r
z = create_model(x)
# Print the output shapes / parameters of different components
print("Output Shape of the first convolution layer:", z.first_conv.shape)
print("Bias value of the last dense layer:", z.classify.b.value)
Я немного экспериментировал и настраивал конфигурацию, изменяя значения параметров, добавляя и удаляя слои, но мой CNN, кажется, нечтобы учиться на моих данных, он сходится к определенной точке в лучшем случае, а затем ударяет в стену, и ошибка перестает уменьшаться.
Я обнаружил, что learning_rate
и num_minibatches_to_train
параметры важны.Я на самом деле установил learning_rate = 0.2
и num_minibatches_to_train = 128
Я также использую sgd
в качестве ученика.Вот пример моих последних результатов:
Minibatch: 0, Loss: 2.4097, Error: 95.31%
Minibatch: 100, Loss: 2.3449, Error: 95.31%
Minibatch: 200, Loss: 2.3751, Error: 90.62%
Minibatch: 300, Loss: 2.2813, Error: 78.12%
Minibatch: 400, Loss: 2.3478, Error: 84.38%
Minibatch: 500, Loss: 2.3086, Error: 87.50%
Minibatch: 600, Loss: 2.2518, Error: 84.38%
Minibatch: 700, Loss: 2.2797, Error: 82.81%
Minibatch: 800, Loss: 2.3234, Error: 84.38%
Minibatch: 900, Loss: 2.2542, Error: 81.25%
Minibatch: 1000, Loss: 2.2579, Error: 85.94%
Minibatch: 1100, Loss: 2.3469, Error: 85.94%
Minibatch: 1200, Loss: 2.3334, Error: 84.38%
Minibatch: 1300, Loss: 2.3143, Error: 85.94%
Minibatch: 1400, Loss: 2.2934, Error: 92.19%
Minibatch: 1500, Loss: 2.3875, Error: 85.94%
Minibatch: 1600, Loss: 2.2926, Error: 90.62%
Minibatch: 1700, Loss: 2.3220, Error: 87.50%
Minibatch: 1800, Loss: 2.2693, Error: 87.50%
Minibatch: 1900, Loss: 2.2864, Error: 84.38%
Minibatch: 2000, Loss: 2.2678, Error: 79.69%
Minibatch: 2100, Loss: 2.3221, Error: 92.19%
Minibatch: 2200, Loss: 2.2033, Error: 87.50%
Minibatch: 2300, Loss: 2.2493, Error: 87.50%
Minibatch: 2400, Loss: 2.4446, Error: 87.50%
Minibatch: 2500, Loss: 2.2676, Error: 85.94%
Minibatch: 2600, Loss: 2.3562, Error: 85.94%
Minibatch: 2700, Loss: 2.3290, Error: 82.81%
Minibatch: 2800, Loss: 2.3767, Error: 87.50%
Minibatch: 2900, Loss: 2.2684, Error: 76.56%
Minibatch: 3000, Loss: 2.3365, Error: 90.62%
Minibatch: 3100, Loss: 2.3369, Error: 90.62%
Есть предложения по улучшению моих результатов?Я открыт для любых подсказок / исследований.
Заранее благодарен