โครงข่าย LSTM
อย่างที่ทราบกันดีอยู่แล้ว RNN cell แบบธรรมดานั้นไม่ค่อยได้ใช้งานจริงมากนัก ทางเลือกที่นิยมกว่าและจัดการกับลำดับข้อมูลยาว ๆ ได้ดีกว่าอย่างชัดเจน คือ Long Short-Term Memory cell หรือ LSTM ในแบบฝึกหัดนี้ จะได้ลองสร้างโครงข่าย LSTM ด้วยตัวเอง!
ความแตกต่างที่สำคัญที่สุดในการ implement เมื่อเทียบกับโครงข่าย RNN ที่เคยสร้างไปก่อนหน้า คือ LSTM มี hidden state สองตัวแทนที่จะเป็นตัวเดียว ดังนั้นจึงต้องกำหนดค่าเริ่มต้นให้กับ hidden state เพิ่มเติมนี้ด้วย และส่งผ่านไปยัง LSTM cell
torch และ torch.nn ได้ถูก import ให้แล้ว เริ่มเขียนโค้ดได้เลย!
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Deep Learning ระดับกลางด้วย PyTorch
คำแนะนำการฝึกหัด
- ใน method
.__init__()ให้กำหนด LSTM layer และกำหนดให้กับself.lstm - ใน method
forward()ให้กำหนดค่าเริ่มต้นของ hidden state หน่วยความจำระยะยาวตัวแรกc0ด้วยค่าศูนย์ - ใน method
forward()ให้ส่ง input ทั้งสามตัวไปยัง layerLSTMได้แก่ input ของ time step ปัจจุบัน และ tuple ที่บรรจุ hidden state ทั้งสองตัว
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
class Net(nn.Module):
def __init__(self, input_size):
super().__init__()
# Define lstm layer
____ = ____(
input_size=1,
hidden_size=32,
num_layers=2,
batch_first=True,
)
self.fc = nn.Linear(32, 1)
def forward(self, x):
h0 = torch.zeros(2, x.size(0), 32)
# Initialize long-term memory
c0 = ____
# Pass all inputs to lstm layer
out, _ = ____
out = self.fc(out[:, -1, :])
return out