Python (tensorflow) - Hasil akurasi Regularisasi Dropout

Saya mencoba menyelesaikan kode untuk masalah klasifikasi (klasifikasi gambar) di lingkungan python. Saya membangun NN 5 lapisan dengan jumlah neuron yang ditentukan, menggunakan pengoptimal penurunan gradien dari perpustakaan Tensorflow. Kode 'lengkap' pertama dibawa ke tingkat akurasi yang tinggi, tetapi karena masalah overfitting telah muncul, saya memutuskan untuk memperkenalkan prosedur regularisasi dropout. Pada akhir proses pertama semuanya tampak baik-baik saja, dengan Akurasi Pelatihan:1.0 dan Akurasi Pengujian:0.9606 setelah melatih model sebanyak lebih dari 1000 iterasi. Beberapa detik kemudian, saya memutuskan untuk menjalankan ulang kode tersebut, dan seperti yang Anda lihat pada dua gambar berikut, ada yang tidak beres. Akurasi prediksi melalui regularisasi dropout - GAGAL , Fungsi biaya melalui regularisasi dropout - GAGAL.Simulasi berhenti sebelum iterasi terakhir yang ditentukan tanpa memberi saya peringatan keluaran apa pun! Menjalankan kode yang sama, bagaimana mungkin? Adakah yang pernah mengalami masalah seperti ini sebelumnya? Apakah ini masalah penghitungan fungsi entropi silang atau bagaimana akurasi NN bisa meluruh menjadi nol dari tingkat akurasi setinggi itu secara instan?


person Claudio Maino    schedule 22.10.2017    source sumber
comment
dapatkah Anda membagikan kode Anda di sini untuk ditinjau?   -  person Sameer Mahajan    schedule 23.10.2017
comment
memposting kodenya!   -  person Claudio Maino    schedule 23.10.2017


Jawaban (1)


Ini kodenya. Hal ini didasarkan pada kumpulan data mnist yang digunakan untuk masalah klasifikasi digit. Di sini sebagai berikut:

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

Xflatten=tf.reshape(X, [-1, 784])

Y1f=tf.nn.relu(tf.matmul(Xflatten,W1) + b1)
Y1=tf.nn.dropout(Y1f,pkeep)

Y2f=tf.nn.relu(tf.matmul(Y1,W2) + b2)
Y2=tf.nn.dropout(Y2f,pkeep)

Y3f=tf.nn.relu(tf.matmul(Y2,W3) + b3)
Y3=tf.nn.dropout(Y3f,pkeep)

Y4f=tf.nn.relu(tf.matmul(Y3,W4) + b4)
Y4=tf.nn.dropout(Y4f,pkeep)

Y=tf.nn.softmax(tf.matmul(Y4,W5) + b5)

Y_=tf.placeholder(tf.float32, [None, 10]) #Y_ stands for the labels representing the digits; "one-hot" encoded

cross_entropy= -tf.reduce_sum(Y_ * tf.log(Y)) #tf.reduce_sum() computes the summation of the required elements for the cross entropy computation

is_correct=tf.equal(tf.argmax(Y,1),tf.argmax(Y_,1)) #tf.argmax() allows to make the "one-hot" decoding
accuracy=tf.reduce_mean(tf.cast(is_correct, tf.float32)) 

optimizer=tf.train.GradientDescentOptimizer(learning_rate)train_step=optimizer.minimize(cross_entropy) 

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

iterations_num=1000 
xaxis=np.arange(iterations_num) 
num_minibatches = int(50000 / minibatch_size) cost_train=[]
accuracy_train=[]
cost_test=[]
accuracy_test=[]

for i in range(iterations_num):

    #load batch of images and correct answers
    batch_X, batch_Y = mnist.train.next_batch(100)
    train_data={Xflatten: batch_X, Y_: batch_Y}

    #train
    sess.run(train_step, feed_dict=train_data)

    #success?
    a_train,c_train=sess.run([accuracy, cross_entropy], feed_dict=train_data)
    cost_train.append(c_train)
    accuracy_train.append(a_train)

    #success on test data?
    test_data={Xflatten: mnist.test.images, Y_: mnist.test.labels}
    a_test,c_test=sess.run([accuracy, cross_entropy], feed_dict=test_data)
    cost_test.append(c_test)
    accuracy_test.append(a_test)

plt.plot(xaxis,cost_train,'b',xaxis,cost_test,'r')

plt.ylabel('cost with dropout regularization')

plt.xlabel('iterations')

plt.title("Learning rate =" + str(learning_rate))

plt.show()

plt.plot(xaxis,accuracy_train,'b',xaxis,accuracy_test,'r')

plt.ylabel('accuracy with dropout regularization')

plt.xlabel('iterations')

plt.title("Learning rate =" + str(learning_rate))

plt.show()

print ("Train Accuracy:" + str(a_train))
print ("Test Accuracy:" + str(a_test))   

sess.close()
person Claudio Maino    schedule 23.10.2017