Deeplearning-chap10

심준보·2023년 5월 24일
0

Deeplearning

목록 보기
1/5
post-thumbnail

Deeplearning-chap10

시계열을 위한 딥러닝

  • 기온 예측 문제

날씨 데이터셋 조사하기


import os
fname = os.path.join("jena_climate_2009_2016.csv")

with open(fname) as f:
    data = f.read()

lines = data.split("\n")
header = lines[0].split(",")
lines = lines[1:]
print(header)
print(len(lines))  
  • fname = os.path.join("jena_climate_2009_2016.csv")
    :fname 변수에 "jena_climate_2009_2016.csv" 파일의 경로를 저장합니다. os.path.join() 함수를 사용하여 현재 작업 디렉토리와 파일 이름을 결합합니다.

  • with open(fname) as f:
    :with 문을 사용하여 파일을 엽니다. 파일 핸들을 f로 지정합니다. 이 방식으로 파일을 열면 작업이 완료되면 자동으로 파일이 닫힙니다.

데이터 파싱

import numpy as np
temperature = np.zeros((len(lines),))  # 1차원 배열을 생성한다.
raw_data = np.zeros((len(lines), len(header) - 1))  # 온도를 제외한 값을 저장하는 배열 , 2차원 배열 생성
for i, line in enumerate(lines):
    values = [float(x) for x in line.split(",")[1:]]  # 첫번쨰 열(날짜)을 제외환 나머지 열의 값을 가져와서 부동 소수점으로 변환 
    temperature[i] = values[1]  # 두번째 값(온도)을 저장한다
    raw_data[i, :] = values[:]  # 온도를 제외한 나머지 값들을 저장한다.

전체 기온을 그래프로 그리기


from matplotlib import pyplot as plt  # pyplot 데이터를 시각화하는 함수들을 제공한다.
plt.plot(range(len(temperature)), temperature) # x축과 y축 설정해주기
plt.show()
  • plt.plot(range(len(temperature)), temperature)
    : x축과 y축을 설정하기

각 분할에 사용할 샘플 수 계산하기


num_train_samples = int(0.5 * len(raw_data))  # raw_data의 50퍼센트를 train에 저장
num_val_samples = int(0.25 * len(raw_data))   # 25퍼센트를 val에 저장
num_test_samples = len(raw_data) - num_train_samples - num_val_samples # 학습과 검증 데이터를 뺸것
print("num_train_samples:", num_train_samples)  
print("num_val_samples:", num_val_samples)
print("num_test_samples:", num_test_samples)
  • num_train_samples = int(0.5 * len(raw_data))
    :raw_data의 50퍼센트를 train에 저장하기위한 샘플 개수

<데이터 준비>

데이터정규화

mean = raw_data[:num_train_samples].mean(axis=0)
raw_data -= mean
std = raw_data[:num_train_samples].std(axis=0)
raw_data /= std   #정규화 하는 것
  • raw_data 배열에서 처음부터 num_train_samples까지의 데이터를 사용하여 열(axis=0) 별로 평균을 계산합니다. 평균값은 mean 변수에 저장됩니다. 이를 통해 각 열의 평균을 구할 수 있습니다.
import numpy as np
from tensorflow import keras

int_sequence = np.arange(10)  
dummy_dataset = keras.utils.timeseries_dataset_from_array(  
    data=int_sequence[:-3],  
    targets=int_sequence[3:],  
    sequence_length=2,
    batch_size=5,   
)

for inputs, targets in dummy_dataset:
    print(f"inputs.shape={inputs.shape}, targets.shape={targets.shape}")
    for i in range(inputs.shape[0]):
        print([int(x) for x in inputs[i]], int(targets[i]))   
  • inputs
    : batch_size -> 행
    sequence_length -> 열

추가코드

int_sequence = np.arange(100)
sampling_rate = 2 
sequence_len = 5  
delay = sampling_rate * (sequence_len + 4 - 1)  # delay를 추가함
print(f"delay={delay}")
dummy_dataset = keras.utils.timeseries_dataset_from_array(
    data=int_sequence[:-delay],  
    targets=int_sequence[delay:],
    sampling_rate = sampling_rate,
    sequence_length=sequence_len,
    batch_size=3,
    start_index = 10,  # 인덱스 10-50까지 쓰겠다.    
    end_index = 50
)
  • sample_rate : 2
    :data포인트를 나타낸다. (데이터끼리의 간격이다)

  • start_index : 사용할 시작 인덱스

  • end_index: 종료 인덱스

훈련,검증 데이터셋 만들기


sampling_rate = 6  
sequence_length = 120 
delay = sampling_rate * (sequence_length + 24 - 1) 
batch_size = 256


#traindata
train_dataset = keras.utils.timeseries_dataset_from_array(  #t imeseries_dataset_from_array : 
    raw_data[:-delay],
    targets=temperature[delay:],
    sampling_rate=sampling_rate,  
    sequence_length=sequence_length,
    shuffle=True, 
    batch_size=batch_size,
    start_index=0,
    end_index=num_train_samples)

#valdata
val_dataset = keras.utils.timeseries_dataset_from_array(
    raw_data[:-delay],
    targets=temperature[delay:],
    sampling_rate=sampling_rate,
    sequence_length=sequence_length,
    shuffle=True,
    batch_size=batch_size,
    start_index=num_train_samples,
    end_index=num_train_samples + num_val_samples)

# testdata
test_dataset = keras.utils.timeseries_dataset_from_array(
    raw_data[:-delay],
    targets=temperature[delay:],
    sampling_rate=sampling_rate,
    sequence_length=sequence_length,
    shuffle=True,
    batch_size=batch_size,
    start_index=num_train_samples + num_val_samples)
  • shuffle= True
    : 데이터셋을 섞을지의 여부 , 전체를 다 섞는것이 아닌 지정되어있는 값 안에서만 섞는다.

훈련 데이터셋의 배치 크기 확인하기

for samples, targets in train_dataset:
    print("샘플 크기:", samples.shape)  #(batch_size, sequence_length, num_features) 형태로 표시 # 120:sequencelenght에 의해서 나온다.
    print("타깃 크기:", targets.shape)
    break
  • sample.shape
    : (batch_size, sequence_length, num_features) 형태로 표시
  • num_features : 입력데이터의 특성 개수
profile
밑거름이라고생각합니다

0개의 댓글