Я работаю над созданием архитектуры полностью сверточной сети для сегментации изображений. Для каждого изображения я хочу классифицировать каждый пиксель позади класса № 0 (фон) или класса № 1.
Поскольку вся моя сеть не работает должным образом - вообще (сходясь только к прогнозированию класса 0), я упростил ее до более элементарной сети, которая по сути является полностью связным слоем:
X = tf.placeholder(tf.float32, shape=[None, 720, 1280, 3])
y = tf.placeholder(tf.int32, shape=[None, 720, 1280])
logits= tf.layers.conv2d(X, filters=2, kernel_size=1, strides=1, padding="SAME",
activation=tf.nn.relu)
labels = tf.contrib.layers.one_hot_encoding(y, 2)
xentropy = tf.losses.softmax_cross_entropy(labels, logits)
loss = tf.reduce_mean(xentropy)
optimizer = tF.train.AdamOptimizer(learning_rate=1e-1)
training_op = optimizer.minimize(loss)
Если эта сеть работает должным образом, я ожидаю наложения одного изображения, подаваемого в качестве входного сигнала. Однако это не тот случай, как показано в этих журналах:
Epoch 0, train loss: 0.2580, eval loss: 0.5867
Epoch 1, train loss: 0.2572, eval loss: 0.5946
Epoch 2, train loss: 0.2569, eval loss: 0.6009
Epoch 3, train loss: 0.2567, eval loss: 0.6048
Epoch 4, train loss: 0.2567, eval loss: 0.6067
Epoch 5, train loss: 0.2566, eval loss: 0.6072
Epoch 6, train loss: 0.2566, eval loss: 0.6070
Epoch 7, train loss: 0.2566, eval loss: 0.6066
Epoch 8, train loss: 0.2565, eval loss: 0.6061
...
Epoch 686, train loss: 0.2553, eval loss: 0.5916
Я не могу понять, что не так с этой реализацией. У тебя есть идеи?