njs03332 / ml_study

3 stars 0 forks source link

2023/09/07 ~ 2023/11/02 #74

Open njs03332 opened 1 year ago

njs03332 commented 1 year ago
njs03332 commented 1 year ago

assign roles -s 0906 -c 1 2 3

njs03332 commented 1 year ago
0 1 2
member 한단비 주선미 김유리
chapter 1 2 3
njs03332 commented 12 months ago

15.3.3 심층 RNN

15.3.4 여러 타임 스텝 앞을 예측하기

10개의 유닛을 가진 출력층이 필요함

model = keras.models.Sequential([ keras.layers.SimpleRNN(20, return_sequences=True, input_shape=[None, 1]), keras.layers.SimpleRNN(20), keras.layers.Dense(10) ])

모델 훈련 후, 다음 값 10개를 한 번에 예측

Y_pred = model.predict(X_new)


- 이 모델의 MSE=0.008
- 시퀀스-투-시퀀스 RNN으로 바꾸면 개선 가능 (마지막 타임 스텝에서 뿐만 아니라 모든 타임 스텝에서 다음 값 10개를 예측하도록 모델을 훈련)
  - 장점 - 모든 타임 스텝에서 RNN 출력에 대한 항이 손실에 포함됨
  - 각 타임 스텝의 출력에서 그레이디언트가 흐를 수 있음
  - 훈련을 안정적으로 만들고 훈련 속도를 높임
```python
Y = np.empty((10000, n_steps, 10))  # 각 타깃은 10D 벡터의 시퀀스
for step_ahead in range(1, 10 + 1):
    Y[..., step_ahead - 1] = series[..., step_ahead:step_ahead + n_steps, 0]
Y_train = Y[:7000]
Y_valid = Y[7000:9000]
Y_test = Y[9000:]
model = keras.models.Sequential([
    keras.layers.SimpleRNN(20, return_sequences=True, input_shape=[None, 1]),
    keras.layers.SimpleRNN(20, return_sequences=True),
    keras.layers.TimeDistributed(keras.layers.Dense(10))
])
def last_time_step_mse(Y_true, Y_pred):
    return keras.metrics.mean_squared_error(Y_true[:, -1], Y_pred[:, -1])

optimizer=keras.optimizers.Adam(lr=0.01)
model.compile(loss="mse",
              optimizer=optimizer,
              metrics=[last_time_step_mse])
danbi5228 commented 12 months ago

15.2 RNN 훈련하기

15.3 시계열 예측하기

def generate_time_series(batch_size, n_steps): freq1, freq2, offset1, offset2 = np.random.rand(4, batch_size, 1) time = np.linspace(0, 1, n_steps) series = 0.5 np.sin((time - offset1) (freq1 10 + 10)) # 사인 곡선 1 series += 0.2 np.sin((time - offset2) (freq2 20 + 20)) # + 사인 곡선 2 series += 0.1 * (np.random.rand(batch_size, n_steps) - 0.5) # + 잡음 return series[..., np.newaxis].astype(np.float32) # size: [ 배치 크기, 타임 스텝 수, 1]

n_steps = 50 series = generate_time_series(10000, n_steps + 1) X_train, y_train = series[:7000, :n_steps], series[:7000, -1] # size: [7000, 50, 1], [7000,1] X_valid, y_valid = series[7000:9000, :n_steps], series[7000:9000, -1] # X_test, y_test = series[9000:, :n_steps], series[9000:, -1]

givitallugot commented 11 months ago

15.3.1 기준 성능

15.3.2 간단한 RNN 구현하기

model = keras.models.Sequential([
    keras.layers.SimpleRNN(1, input_shape=[None, 1])
])