-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBuild2.py
148 lines (103 loc) · 4.67 KB
/
Build2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#######################################################
"""
윤지 인공신경망을 이용한 기상예측 프로젝트
"""
########################################################
# 각종 필요한 것들 가져오기
#기본 배열 다루기 Numpy
import numpy as np
#텐서플로우 가져오기
import tensorflow as tf
#데이터 다루기
import pandas as pd
#케라스 가져오기
from keras.models import Sequential # 신경망 모델 생성자함수
from keras.layers import Embedding, LSTM, GRU, Dense, Dropout
from keras.models import load_model # 신경망 모델 파일 불러오기
from keras.optimizers import Adam
from keras.preprocessing import sequence
from keras.callbacks import EarlyStopping # 학습조기종료
from sklearn.model_selection import train_test_split # 학습용 따로 검증용 따로
# 일단 데이터부터 가져온다.
# # 기온,강수량,풍속,습도,이슬점,현지기압,시정
#
# # 습도 = 습도 * 0.01
# # 기압 = 기압 - 1000
# # 시정 = 시정 * 0.001
#########################################################################
# 학습 데이터 불러오기
#########################################################################
def load_Data_except():
answear = input("입력데이터 불러오기 >");
try:
Train_Set = pd.read_csv(answear,
names=['기온', '습도', '이슬점', '기압']);
except:
print("파일열기 실패\n");
Train_Set = None;
return Train_Set;
#입력값 불러오기
X_Train_Set_Load = load_Data_except();
while(X_Train_Set_Load is None):
X_Train_Set_Load = load_Data_except();
print(X_Train_Set_Load.head(5));
print("불러오기 완료\n\n");
#목표값 불러오기
Y_Train_Set_Load = load_Data_except();
while(Y_Train_Set_Load is None):
Y_Train_Set_Load = load_Data_except();
print(Y_Train_Set_Load.head(5));
print("불러오기 완료\n\n");
X_Train_Set = X_Train_Set_Load;
Y_Train_Set = Y_Train_Set_Load;
#학습용 따로 검증용 따로
"""
X_Train_Set, X_Test_Set, Y_Train_Set, Y_Test_Set = train_test_split(X_Train_Set_Load,
Y_Train_Set_Load,
test_size=0.25);
"""
# 데이터 가공하기
#########################################################################
# 신경망 만들기
#########################################################################
# 모델 구조 설계
Weather_Forecast_Model = Sequential();
# 최초 입력층
# 은닉층 이름이 달라야 추가된다. 같은 것을 계속 추가할 수는 없다.
# 중간에 ReLU층이 어느 정도 있어야 한다.
Hidden_Layer1 = Dense(8, input_dim=4,activation='linear');
Weather_Forecast_Model.add(Hidden_Layer1);
Hidden_Layer2 = Dense(8, activation='linear');
Weather_Forecast_Model.add(Hidden_Layer2);
Hidden_Layer3 = Dense(4, activation='linear');
Weather_Forecast_Model.add(Hidden_Layer3);
Hidden_Layer4 = Dense(4, activation='linear');
Weather_Forecast_Model.add(Hidden_Layer4);
Hidden_Layer5 = Dense(4, activation='linear');
Weather_Forecast_Model.add(Hidden_Layer5);
Hidden_Layer6 = Dense(4, activation='linear');
Weather_Forecast_Model.add(Hidden_Layer6);
Hidden_Layer7 = Dense(4, activation='linear');
Weather_Forecast_Model.add(Hidden_Layer7);
#########################################################################
# 환경설정 및 학습시작
#########################################################################
# 모델 환경설정
Weather_Forecast_Model.compile(loss='mean_squared_logarithmic_error', optimizer='adam', metrics=['accuracy']);
# 모델 학습하기
# 자동종료 함수
early_stopping = EarlyStopping(monitor='loss', patience=100);
Weather_Forecast_Model.fit(X_Train_Set,Y_Train_Set, epochs=500, batch_size=500, callbacks=[early_stopping]);
#Weather_Forecast_Model.fit(X_Train_Set,Y_Train_Set, epochs=200, batch_size=500);
print("\n 정확도: %.4f" % (Weather_Forecast_Model.evaluate(X_Train_Set,Y_Train_Set)[1]));
Test_Forecast_List = Weather_Forecast_Model.predict(X_Train_Set.head(5));
for i in range(5):
print(Test_Forecast_List[i]);
#########################################################################
# 신경망 저장하기
#########################################################################
answear = input("\n\n현재 수치예보모델을 저장하기 >");
# 모델 저장하기
Weather_Forecast_Model.save(answear);
Weather_Forecast_Model.summary(); # 이게 있어야 불러올 때 잘 온다.
print("\n저장완료");