Python (tensorflow) - ผลลัพธ์ความแม่นยำของ Dropout Regularization

ฉันกำลังพยายามกรอกโค้ดสำหรับปัญหาการจัดหมวดหมู่ (การจัดหมวดหมู่รูปภาพ) ในสภาพแวดล้อมของ Python ฉันสร้าง NN 5 เลเยอร์โดยมีจำนวนเซลล์ประสาทที่กำหนด โดยใช้เครื่องมือเพิ่มประสิทธิภาพการไล่ระดับสีจากไลบรารีเทนเซอร์โฟลว์ โค้ด 'สมบูรณ์' ตัวแรกนำมาซึ่งความแม่นยำในระดับสูง แต่เนื่องจากมีปัญหาในการติดตั้งมากเกินไป ฉันจึงตัดสินใจแนะนำขั้นตอนการปรับมาตรฐานกลางคัน ในตอนท้ายของการรันครั้งแรก ทุกอย่างดูดี โดยมี ความแม่นยำของรถไฟ:1.0 และ ความแม่นยำในการทดสอบ:0.9606 หลังจากฝึกฝนโมเดลมากกว่า 1,000 ครั้ง ไม่กี่วินาทีต่อมา ฉันตัดสินใจรันโค้ดอีกครั้ง และอย่างที่คุณเห็นจากสองรูปภาพต่อไปนี้ มีบางอย่างผิดพลาด ความแม่นยำในการคาดการณ์ผ่านการปรับสมดุลการออกกลางคัน - ล้มเหลว , ฟังก์ชันต้นทุนผ่านการปรับมาตรฐานกลางคัน - ล้มเหลว การจำลองหยุดก่อนการวนซ้ำที่กำหนดไว้ครั้งล่าสุดโดยไม่แจ้งเตือนเอาต์พุตใดๆ ให้ฉันทราบ! ใช้โค้ดเดียวกันจะเป็นไปได้ยังไง? มีใครมีปัญหาประเภทนี้มาก่อนหรือไม่? มันเป็นปัญหาของการคำนวณฟังก์ชันเอนโทรปีข้ามหรือความแม่นยำของ NN จะลดลงเหลือศูนย์จากระดับความแม่นยำสูงดังกล่าวในทันทีได้อย่างไร


person Claudio Maino    schedule 22.10.2017    source แหล่งที่มา
comment
คุณสามารถแบ่งปันรหัสของคุณที่นี่เพื่อตรวจสอบได้หรือไม่?   -  person Sameer Mahajan    schedule 23.10.2017
comment
โพสต์รหัส!   -  person Claudio Maino    schedule 23.10.2017


คำตอบ (1)


นี่คือรหัส ขึ้นอยู่กับชุดข้อมูล mnist ที่ใช้สำหรับปัญหาการจำแนกประเภทตัวเลข ตามนี้ครับ:

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