Вопрос связан с построением простой нейронной сети с использованием Tensorflow для классификации изображения рукописных цифр - PullRequest
0 голосов
/ 23 марта 2020

Я пытался построить нейронную сеть с тремя скрытыми слоями, имеющими 512,256,128 узлов соответственно со стороны ввода на сторону вывода.

сторона ввода имеет 784 узла, которые будут принимать 784 входных пикселя из 2828 пикселей рукописных изображений цифры (из набора данных MNIST).

Я использовал простую линейную гипотезу y = w * x + b

Затем после каждого выходного слоя я использовал функцию активации сигмоида.

вычислил имел в виду и использовал встроенный оптимизатор градиентного спуска для оптимизации потерь.

Но даже после 1000 итераций я не получаю вывод в виде одного горячего кодирования (например, 00010000000).

Я не могу найти, где я допустил ошибку. Помоги мне, если бы ты мог понять это.

Я делюсь кодом ниже:

n1 = 784
n2 = 512
n3 = 256
n4 = 128
n5 = 10

learning_rate = 0.0001
itr= 1000
batch_size = 128

x = tf.placeholder( tf.float32 , [None,784] )                                        
y= tf.placeholder(tf.float32, [None,10])  

weights ={   

    'w2': tf.Variable( tf.truncated_normal([784,512], stddev=0.1)),
    'w3': tf.Variable( tf.truncated_normal([512,256],stddev=0.1)),
    'w4': tf.Variable( tf.truncated_normal([256,128],stddev=0.1)),
    'w5': tf.Variable( tf.truncated_normal([128,10],stddev=0.1) )    
}

bias={    
    'b2': tf.Variable( tf.truncated_normal([512],stddev=0.1)),
    'b3': tf.Variable( tf.truncated_normal([256],stddev=0.1)),
    'b4': tf.Variable( tf.truncated_normal([128],stddev=0.1)),
    'b5': tf.Variable( tf.truncated_normal([10],stddev=0.1))
}

op1 = tf.add( tf.matmul(x,weights['w2']) , bias['b2']  )
yout1 =  tf.sigmoid(op1)

op2 = tf.add( tf.matmul(yout1,weights['w3']) , bias['b3'] )
yout2 =  tf.sigmoid(op2)

op3 = tf.add( tf.matmul(yout2,weights['w4'])  , bias['b4'] )
yout3 =  tf.sigmoid(op3)

op4 = tf.add( tf.matmul(yout3 ,weights['w5']) , bias['b5'] )
yout4 =  tf.sigmoid(op4)

loss = tf.reduce_mean( tf.square(yout4-y))

optimizer= tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

init= tf.global_variables_initializer()

with tf.Session() as sess:

    init= tf.global_variables_initializer()
    sess.run(init)

    for i in range(itr):

        batch_x, batch_y = df.train.next_batch(batch_size)
        sess.run( [loss,optimizer] , {x: batch_x, y: batch_y } )

        if i==999:

            print(sess.run([loss],{x: batch_x, y: batch_y }))

            #Now i am going to verify my models answer by testing one image

            batch_x, batch_y = df.train.next_batch(1)
            print(sess.run([yout4],{x: batch_x, y: batch_y }))
...