เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

ปัญหา Vanishing Gradient

ปัญหา gradient อีกรูปแบบหนึ่งคือเมื่อ gradient มีค่าลดลงจนเข้าใกล้ศูนย์ (vanishing gradient) ซึ่งแก้ไขได้ยากกว่า เพราะตรวจจับได้ยากกว่ามาก หาก loss function ไม่ดีขึ้นในแต่ละขั้น จะรู้ได้อย่างไรว่าเป็นเพราะ gradient เป็นศูนย์จนน้ำหนักไม่ได้รับการอัปเดต หรือเพราะโมเดลเรียนรู้ไม่ได้?

ปัญหานี้เกิดขึ้นบ่อยในโมเดล RNN เมื่อต้องจดจำบริบทระยะยาว (เช่น ประโยคที่ยาวมาก)

ในแบบฝึกหัดนี้ จะสังเกตปัญหาดังกล่าวบนข้อมูล IMDB ที่คัดเลือกเฉพาะประโยคที่ยาวกว่าปกติ ข้อมูลถูกโหลดไว้ในตัวแปร X และ y รวมถึง class Sequential, SimpleRNN, Dense และ matplotlib.pyplot ในชื่อ plt โมเดลผ่านการ pre-train มาแล้ว 100 epochs โดยน้ำหนักและประวัติการฝึกถูกจัดเก็บไว้ในไฟล์ model_weights.h5 และตัวแปร history

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

ดูคอร์ส

คำแนะนำการฝึกหัด

  • เพิ่ม layer SimpleRNN เข้าไปในโมเดล
  • โหลดน้ำหนักที่ผ่านการ pre-train มาแล้วเข้าสู่โมเดลโดยใช้เมธอด .load_weights()
  • เพิ่มค่า accuracy ของข้อมูลฝึกที่อยู่ใน attribute 'acc' ลงในกราฟ
  • แสดงกราฟโดยใช้เมธอด .show()

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

# Create the model
model = Sequential()
model.add(____(units=600, input_shape=(None, 1)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])

# Load pre-trained weights
model.____('model_weights.h5')

# Plot the accuracy x epoch graph
plt.plot(history.history[____])
plt.plot(history.history['val_acc'])
plt.legend(['train', 'val'], loc='upper left')
plt.____()
แก้ไขและรันโค้ด