Привет, я новичок в нейронных сетях с тензорным потоком. Я взял небольшую часть набора данных space365. Я хочу создать нейронную сеть для классификации между 10 местами.
Для этого я попытался сделать небольшую копию сети vgg. У меня проблема в том, что на выходе функции softmax я получаю массив с горячим кодированием. Ища проблемы в моем коде, я понял, что выходные данные функций relu либо 0, либо большое число (около 10000).
Я не знаю, где я не прав. Вот мой код:
def variables(shape):
return tf.Variable(2*tf.random_uniform(shape,seed=1)-1)
def layerConv(x,filter):
return tf.nn.conv2d(x,filter, strides=[1, 1, 1, 1], padding='SAME')
def maxpool(x):
return tf.nn.max_pool(x,[1,2,2,1],[1,2,2,1],padding='SAME')
weights0 = variables([3,3,1,16])
l0 = tf.nn.relu(layerConv(input,weights0))
l0 = maxpool(l0)
weights1 = variables([3,3,16,32])
l1 = tf.nn.relu(layerConv(l0,weights1))
l1 = maxpool(l1)
weights2 = variables([3,3,32,64])
l2 = tf.nn.relu(layerConv(l1,weights2))
l2 = maxpool(l2)
l3 = tf.reshape(l2,[-1,64*32*32])
syn0 = variables([64*32*32,1024])
bias0 = variables([1024])
l4 = tf.nn.relu(tf.matmul(l3,syn0) + bias0)
l4 = tf.layers.dropout(inputs=l4, rate=0.4)
syn1 = variables([1024,10])
bias1 = variables([10])
output_pred = tf.nn.softmax(tf.matmul(l4,syn1) + bias1)
error = tf.square(tf.subtract(output_pred,output),name='error')
loss = tf.reduce_sum(error, name='cost')
#TRAINING
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
train = optimizer.minimize(loss)
Ввод нейронной сети представляет собой нормализованное изображение в градациях серого размером 256 * 256 пикселей.
Скорость обучения равна 0,1, а размер пакета - 32.
Заранее спасибо !!