การจำแนกความรู้สึกที่แม่นยำยิ่งขึ้น
ในแบบฝึกหัดนี้ เราจะกลับมาที่ปัญหาการจำแนกความรู้สึก (sentiment classification) ที่เคยทำในบทที่ 1
ครั้งนี้จะเพิ่มความซับซ้อนให้กับโมเดลเพื่อปรับปรุงความแม่นยำ โดยใช้เลเยอร์ Embedding เพื่อฝึก word vectors จากชุดข้อมูลฝึกสอน และใช้เลเยอร์ LSTM สองชั้นเพื่อติดตามบริบทของข้อความที่ยาวขึ้น นอกจากนี้ยังเพิ่มเลเยอร์ Dense พิเศษก่อนเลเยอร์เอาต์พุตด้วย
โมเดลนี้มีความซับซ้อนมากขึ้น และการฝึกอาจใช้เวลานาน จึงมีโมเดลที่ผ่านการฝึกมาแล้วให้ใช้งาน โดยโหลดค่าน้ำหนักด้วยเมทอด .load_weights() จากคลาส keras.models.Sequential โมเดลนี้ฝึกด้วย 10 epochs และค่าน้ำหนักอยู่ในไฟล์ model_weights.h5
โมดูลต่อไปนี้โหลดไว้ในสภาพแวดล้อมแล้ว: Sequential, Embedding, LSTM, Dropout, Dense
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras
คำแนะนำการฝึกหัด
- เพิ่มเลเยอร์
Embeddingเป็นเลเยอร์แรกของโมเดล - เพิ่มเลเยอร์
LSTMชั้นที่สองที่มี 64 ยูนิต โดยให้returningลำดับข้อมูล - เพิ่มเลเยอร์
Denseพิเศษที่มี 16 ยูนิต - ประเมินโมเดลเพื่อแสดงค่าความแม่นยำบนชุดข้อมูลฝึกสอน
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Build and compile the model
model = Sequential()
model.add(____(vocabulary_size, wordvec_dim, trainable=True, input_length=max_text_len))
model.add(____(64, return_sequences=____, dropout=0.2, recurrent_dropout=0.15))
model.add(LSTM(64, return_sequences=False, dropout=0.2, recurrent_dropout=0.15))
model.add(____(16))
model.add(Dropout(rate=0.25))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Load pre-trained weights
model.load_weights('model_weights.h5')
# Print the obtained loss and accuracy
print("Loss: {0}\nAccuracy: {1}".format(*model.____(X_test, y_test, verbose=0)))