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?
Python (tensorflow) - Hasil akurasi Regularisasi Dropout
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