Điều này cho thấy rằng tất cả các ví dụ đào tạo có độ dài trình tự cố định, cụ thể là timesteps
.
Điều đó không hoàn toàn chính xác, vì kích thước đó có thể None
, tức là chiều dài thay đổi. Trong một lô duy nhất , bạn phải có cùng số dấu thời gian (đây thường là nơi bạn thấy 0-padding và masking). Nhưng giữa các đợt không có hạn chế như vậy. Trong quá trình suy luận, bạn có thể có bất kỳ chiều dài.
Mã ví dụ tạo ra các lô dữ liệu đào tạo thời gian ngẫu nhiên.
from keras.models import Sequential
from keras.layers import LSTM, Dense, TimeDistributed
from keras.utils import to_categorical
import numpy as np
model = Sequential()
model.add(LSTM(32, return_sequences=True, input_shape=(None, 5)))
model.add(LSTM(8, return_sequences=True))
model.add(TimeDistributed(Dense(2, activation='sigmoid')))
print(model.summary(90))
model.compile(loss='categorical_crossentropy',
optimizer='adam')
def train_generator():
while True:
sequence_length = np.random.randint(10, 100)
x_train = np.random.random((1000, sequence_length, 5))
# y_train will depend on past 5 timesteps of x
y_train = x_train[:, :, 0]
for i in range(1, 5):
y_train[:, i:] += x_train[:, :-i, i]
y_train = to_categorical(y_train > 2.5)
yield x_train, y_train
model.fit_generator(train_generator(), steps_per_epoch=30, epochs=10, verbose=1)
Và đây là những gì nó in. Lưu ý các hình dạng đầu ra đang (None, None, x)
chỉ ra kích thước lô thay đổi và kích thước dấu thời gian thay đổi.
__________________________________________________________________________________________
Layer (type) Output Shape Param #
==========================================================================================
lstm_1 (LSTM) (None, None, 32) 4864
__________________________________________________________________________________________
lstm_2 (LSTM) (None, None, 8) 1312
__________________________________________________________________________________________
time_distributed_1 (TimeDistributed) (None, None, 2) 18
==========================================================================================
Total params: 6,194
Trainable params: 6,194
Non-trainable params: 0
__________________________________________________________________________________________
Epoch 1/10
30/30 [==============================] - 6s 201ms/step - loss: 0.6913
Epoch 2/10
30/30 [==============================] - 4s 137ms/step - loss: 0.6738
...
Epoch 9/10
30/30 [==============================] - 4s 136ms/step - loss: 0.1643
Epoch 10/10
30/30 [==============================] - 4s 142ms/step - loss: 0.1441
Masking
lớp để bỏ qua