파이썬 코드 구현 질문입니다.
조회수 687회
Python
def make_dataset(data, seq_length=480, target_delay=24, strides=5,
mode='train', train_mean=None, train_std=None):
assert mode in ['train', 'val', 'test']
if mode is not 'train':
if train_mean is None or train_std is None:
print('Current mode is {}'.format(mode))
print('This mode needs mean and std of train data')
assert False
# 정규화
## 코드 시작 ##
if mode is 'train':
mean = train_data.mean(axis=0) #1-1
std = train_data.std(axis=0) #1-1
else:
mean = train_mean #1-2
std = train_std #1-2
data = (data - mean) / std #1-3
## 코드 종료 ##
# 입력, 타겟 데이터 생성
sequence = []
target = []
for index in range(len(data) - seq_length - target_delay):
if index % strides == 0:
## 코드 시작 ##
sequence.append(index - seq_length) #2-1
target.append(index + seq_length + target_delay) #2-2
## 코드 종료 ##
if mode is 'train':
print(np.array(sequence).shape, np.array(target).shape)
return np.array(sequence), np.array(target), mean, std
else:
print(np.array(sequence).shape, np.array(target).shape)
return np.array(sequence), np.array(target)
"## 코드 시작 ##"과 "## 코드 종료 ##" 사이의 부분만 작성해 주세요.
1-1 : train 모드일 때: train 디렉토리에 있는 데이터 셋(train_data)의 mean, std를 구해야 합니다. 함수를 사용할 경우 axis를 주의해 주세요.
1-2 : val 또는 test 모드일 때: train_mean, train_std를 이용합니다.
1-3 : normalize 코드를 작성해보세요. (수식은 (𝑋−𝔼(𝑋))/√Var(𝑋))
𝔼(𝑋) 는 데이터의 평균(mean), √Var(𝑋)는 데이터의 표준편차(std)입니다.
for문으로 전체 타임스텝 (range(len(data) - seq_length - target_delay))을 돌면서 인덱스(변수명 index)가 stride로 나누어 떨어질 때만 훈련 데이터 셋으로 저장을 합니다.
2-1 : stride=3 이면 index가 0, 3, 6, 9, ... 일 때만 sequence와 target에 데이터를 집어넣는 것입니다. 즉 해당 인덱스는 각 배치 데이터의 첫번째 인덱스가 됩니다. 따라서 data 변수에 해당하는 데이터를 index부터 seq_length(480시간)만큼 잘라내어 sequence에 추가합니다. 이는 곧 모델에게 전달되는 입력 데이터가 됩니다.
2-2 : data의 index부터 seq_length만큼의 떨어진 위치에서 다시 target_delay(즉 24시간) 만큼 떨어진 위치의 기온(0번째 컬럼)을 target에 추가합니다.
최종 Numpy로 변경되었을때 sequence의 shape은 (N, seq_length, 9), target의 shape은 (N,)이 되어야 합니다. N은 전체 데이터 갯수 입니다.
코드 시작과 종료 사이는 직접 작성하였습니다. 다만 위의 코드로 실행하면 결과의 sequence shape이 제대로 구현되지 않는 것 같습니다.
제대로 결과가 나오려면 ## 코드 시작 ##"과 "## 코드 종료 ## 사이를 어떻게 수정하는게 좋을지 도움 부탁드립니다. 긴 글 읽어주셔서 감사합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력