1
0
mirror of https://github.com/newnius/YAO-optimizer.git synced 2025-06-06 22:51:55 +00:00
This commit is contained in:
Newnius 2020-05-01 16:35:56 +08:00
parent a394657a54
commit c68a1aaa5a
3 changed files with 140 additions and 144 deletions

View File

@ -2,6 +2,7 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="0aedafd8-e57e-462a-beda-65af0b91f3df" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/serve.py" beforeDir="false" afterPath="$PROJECT_DIR$/serve.py" afterDir="false" />
</list>
<ignored path="$PROJECT_DIR$/out/" />
@ -15,8 +16,9 @@
<session id="570274097">
<usages-collector id="statistics.lifecycle.project">
<counts>
<entry key="project.open.time.1" value="1" />
<entry key="project.open.time.3" value="1" />
<entry key="project.opened" value="1" />
<entry key="project.opened" value="2" />
</counts>
</usages-collector>
<usages-collector id="statistics.file.extensions.open">
@ -43,24 +45,24 @@
<usages-collector id="statistics.file.extensions.edit">
<counts>
<entry key="Dockerfile" value="16" />
<entry key="py" value="1357" />
<entry key="py" value="1577" />
</counts>
</usages-collector>
<usages-collector id="statistics.file.types.edit">
<counts>
<entry key="Dockerfile" value="16" />
<entry key="Python" value="1357" />
<entry key="Python" value="1577" />
</counts>
</usages-collector>
</session>
</component>
<component name="FileEditorManager">
<leaf>
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/main.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2160">
<caret line="144" column="4" selection-start-line="144" selection-start-column="4" selection-end-line="144" selection-end-column="30" />
<state relative-caret-position="72">
<caret line="215" lean-forward="true" selection-start-line="215" selection-end-line="215" />
<folding>
<element signature="e#0#19#0" expanded="true" />
</folding>
@ -80,11 +82,11 @@
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/serve.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="260">
<caret line="53" column="28" selection-start-line="53" selection-start-column="28" selection-end-line="53" selection-end-column="28" />
<state relative-caret-position="159">
<caret line="215" column="29" lean-forward="true" selection-start-line="215" selection-start-column="29" selection-end-line="215" selection-end-column="29" />
<folding>
<element signature="e#18#46#0" expanded="true" />
<marker date="1588180249558" expanded="true" signature="5697:5971" ph="..." />
<marker date="1588322032419" expanded="true" signature="5713:5715" ph="..." />
</folding>
</state>
</provider>
@ -103,7 +105,7 @@
<entry file="file://$PROJECT_DIR$/requirements.txt">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="8" lean-forward="true" selection-start-line="8" selection-end-line="8" />
<caret line="8" selection-start-line="8" selection-end-line="8" />
</state>
</provider>
</entry>
@ -111,7 +113,7 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/model_tensorflow.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="358">
<state relative-caret-position="870">
<caret line="59" column="45" selection-start-line="59" selection-start-column="45" selection-end-line="59" selection-end-column="45" />
<folding>
<element signature="e#0#23#0" expanded="true" />
@ -145,9 +147,9 @@
<option value="$PROJECT_DIR$/test.py" />
<option value="$PROJECT_DIR$/model/model_tensorflow.py" />
<option value="$PROJECT_DIR$/requirements.txt" />
<option value="$PROJECT_DIR$/main.py" />
<option value="$PROJECT_DIR$/Dockerfile" />
<option value="$PROJECT_DIR$/model_tensorflow.py" />
<option value="$PROJECT_DIR$/main.py" />
<option value="$PROJECT_DIR$/serve.py" />
</list>
</option>
@ -167,8 +169,6 @@
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="AndroidView" />
<pane id="PackagesPane" />
<pane id="ProjectPane">
<subPane>
<expand>
@ -185,6 +185,8 @@
<select />
</subPane>
</pane>
<pane id="AndroidView" />
<pane id="PackagesPane" />
<pane id="Scope" />
</panes>
</component>
@ -232,21 +234,23 @@
<option name="presentableId" value="Default" />
<updated>1588152877746</updated>
<workItem from="1588152880522" duration="16973000" />
<workItem from="1588319878551" duration="1997000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="16973000" />
<option name="totallyTimeSpent" value="18970000" />
</component>
<component name="ToolWindowManager">
<frame x="0" y="0" width="1280" height="800" extended-state="0" />
<editor active="true" />
<layout>
<window_info id="Designer" order="0" />
<window_info id="UI Designer" order="1" />
<window_info id="Capture Tool" order="2" />
<window_info id="Favorites" order="3" side_tool="true" />
<window_info id="Image Layers" order="4" />
<window_info content_ui="combo" id="Project" order="5" sideWeight="0.49898168" visible="true" weight="0.24959612" />
<window_info content_ui="combo" id="Project" order="5" sideWeight="0.49898168" visible="true" weight="0.2536349" />
<window_info id="Structure" order="6" sideWeight="0.50101835" side_tool="true" weight="0.24959612" />
<window_info anchor="bottom" id="Version Control" order="0" />
<window_info active="true" anchor="bottom" id="Terminal" order="1" visible="true" weight="0.32739726" />
@ -282,62 +286,15 @@
<entry file="file://$PROJECT_DIR$/yao-optimizer.iml">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/test.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="150">
<caret line="52" column="30" selection-start-line="52" selection-start-column="30" selection-end-line="52" selection-end-column="30" />
<folding>
<element signature="e#0#19#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/figure/continue_predict_high_with_pytorch.png">
<provider selected="true" editor-type-id="images" />
</entry>
<entry file="file://$PROJECT_DIR$/figure/continue_predict_low_with_pytorch.png">
<provider selected="true" editor-type-id="images" />
</entry>
<entry file="file://$PROJECT_DIR$/figure/predict_high_with_keras.png">
<provider selected="true" editor-type-id="images" />
</entry>
<entry file="file://$PROJECT_DIR$/figure/predict_low_with_tensorflow.png">
<provider selected="true" editor-type-id="images" />
</entry>
<entry file="file://$PROJECT_DIR$/figure/predict_low_with_keras.png">
<provider selected="true" editor-type-id="images" />
</entry>
<entry file="file://$PROJECT_DIR$/figure/predict_high_with_tensorflow.png">
<provider selected="true" editor-type-id="images" />
</entry>
<entry file="file://$PROJECT_DIR$/figure/predict_high_with_pytorch.png">
<provider selected="true" editor-type-id="images" />
</entry>
<entry file="file://$PROJECT_DIR$/Readme.md">
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="SPLIT">
<first_editor />
<second_editor />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/requirements.txt">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="8" lean-forward="true" selection-start-line="8" selection-end-line="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/main.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2160">
<caret line="144" column="4" selection-start-line="144" selection-start-column="4" selection-end-line="144" selection-end-column="30" />
<folding>
<element signature="e#0#19#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test.py" />
<entry file="file://$PROJECT_DIR$/figure/continue_predict_high_with_pytorch.png" />
<entry file="file://$PROJECT_DIR$/figure/continue_predict_low_with_pytorch.png" />
<entry file="file://$PROJECT_DIR$/figure/predict_high_with_keras.png" />
<entry file="file://$PROJECT_DIR$/figure/predict_low_with_tensorflow.png" />
<entry file="file://$PROJECT_DIR$/figure/predict_low_with_keras.png" />
<entry file="file://$PROJECT_DIR$/figure/predict_high_with_tensorflow.png" />
<entry file="file://$PROJECT_DIR$/figure/predict_high_with_pytorch.png" />
<entry file="file://$PROJECT_DIR$/Readme.md" />
<entry file="file://$PROJECT_DIR$/data/stock_data.csv">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60">
@ -352,9 +309,16 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/requirements.txt">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="8" selection-start-line="8" selection-end-line="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/model_tensorflow.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="358">
<state relative-caret-position="870">
<caret line="59" column="45" selection-start-line="59" selection-start-column="45" selection-end-line="59" selection-end-column="45" />
<folding>
<element signature="e#0#23#0" expanded="true" />
@ -362,13 +326,23 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/main.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="72">
<caret line="215" lean-forward="true" selection-start-line="215" selection-end-line="215" />
<folding>
<element signature="e#0#19#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/serve.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="260">
<caret line="53" column="28" selection-start-line="53" selection-start-column="28" selection-end-line="53" selection-end-column="28" />
<state relative-caret-position="159">
<caret line="215" column="29" lean-forward="true" selection-start-line="215" selection-start-column="29" selection-end-line="215" selection-end-column="29" />
<folding>
<element signature="e#18#46#0" expanded="true" />
<marker date="1588180249558" expanded="true" signature="5697:5971" ph="..." />
<marker date="1588322032419" expanded="true" signature="5713:5715" ph="..." />
</folding>
</state>
</provider>

49
main.py
View File

@ -4,7 +4,6 @@ import os
from sklearn.model_selection import train_test_split
from model_tensorflow import train, predict
frame = "tensorflow"
@ -31,7 +30,7 @@ class Config:
shuffle_train_data = True
# train_data_rate = 0.95 #comment yqy
train_data_rate = 1 #add yqy
train_data_rate = 1 # add yqy
valid_data_rate = 0.15
batch_size = 64
@ -47,11 +46,11 @@ class Config:
batch_size = 1
continue_flag = "continue_"
#comment yqy
# comment yqy
# train_data_path = "./data/stock_data.csv"
model_save_path = "./checkpoint/"
figure_save_path = "./figure/"
#comment end
# comment end
# add yqy
train_data_path = "./data/stock_data_30.csv"
# model_save_path = "./checkpoint/30/"
@ -129,10 +128,10 @@ class Data:
if test_data_yqy is None:
test_data_yqy = []
# test_data_yqy=test_data_yqy[1:21]
feature_data=(test_data_yqy - self.mean) / self.std
test_x=[feature_data]
feature_data = (test_data_yqy - self.mean) / self.std
test_x = [feature_data]
return np.array(test_x)
# add end
# add end
def draw(config, origin_data, predict_norm_data):
@ -161,38 +160,42 @@ def draw(config, origin_data, predict_norm_data):
print(predict_data)
def draw_yqy(config, origin_data, predict_norm_data,mean_yqy,std_yqy):# 这里origin_data等同于test_data_values_yqy
def draw_yqy(config, origin_data, predict_norm_data, mean_yqy, std_yqy): # 这里origin_data等同于test_data_values_yqy
label_norm_data = (origin_data - mean_yqy) / std_yqy
assert label_norm_data.shape[0] == predict_norm_data.shape[0], "The element number in origin and predicted data is different"
assert label_norm_data.shape[0] == predict_norm_data.shape[
0], "The element number in origin and predicted data is different"
#label_norm_data=label_norm_data[:,1]
# label_norm_data=label_norm_data[:,1]
label_name = 'high'
label_column_num = 1
loss = np.mean((label_norm_data[config.predict_day:][:,1] - predict_norm_data[:-config.predict_day][0:]) ** 2, axis=0)[1]
loss = \
np.mean((label_norm_data[config.predict_day:][:, 1] - predict_norm_data[:-config.predict_day][0:]) ** 2, axis=0)[1]
print("The mean squared error of stock {} is ".format(label_name), loss)
# label_X = range(origin_data.data_num - origin_data.train_num - origin_data.start_num_in_test)
# predict_X = [x + config.predict_day for x in label_X]
label_data = label_norm_data[:,1] * std_yqy[1]+ mean_yqy[1]
label_data = label_norm_data[:, 1] * std_yqy[1] + mean_yqy[1]
predict_data = predict_norm_data * std_yqy[1]+ mean_yqy[1]
predict_data = predict_norm_data * std_yqy[1] + mean_yqy[1]
print(label_data)
print(predict_data)
# print(label_data[-1])
# print(predict_data[-1][0])
# print(label_data[-1])
# print(predict_data[-1][0])
def main(config):
np.random.seed(config.random_seed)
data_gainer = Data(config)
# add yqy
mean_yqy=Data(config).mean
std_yqy=Data(config).std
#add end
mean_yqy = Data(config).mean
std_yqy = Data(config).std
# add end
if config.do_train:
train_X, valid_X, train_Y, valid_Y = data_gainer.get_train_and_valid_data()
@ -200,15 +203,15 @@ def main(config):
if config.do_predict:
# add yqy
test_data_yqy = pd.read_csv("./data/test_data.csv",usecols=list([2, 5]))
test_data_values_yqy=test_data_yqy.values[:]
test_data_yqy = pd.read_csv("./data/test_data.csv", usecols=list([2, 5]))
test_data_values_yqy = test_data_yqy.values[:]
# test_data_yqy=[104.3,104.39]
test_X =data_gainer.get_test_data_yqy(test_data_values_yqy)
test_X = data_gainer.get_test_data_yqy(test_data_values_yqy)
# add end
# test_X, test_Y = data_gainer.get_test_data(return_label_data=True)# comment yqy
pred_result = predict(config, test_X)
# draw(config, data_gainer, pred_result)# comment yqy
draw_yqy(config, test_data_values_yqy, pred_result,mean_yqy,std_yqy)
draw_yqy(config, test_data_values_yqy, pred_result, mean_yqy, std_yqy)
if __name__ == "__main__":

109
serve.py
View File

@ -11,11 +11,13 @@ import os
from sklearn.model_selection import train_test_split
from model_tensorflow import train, predict
import csv
from collections import deque
from StringIO import StringIO
class Config:
feature_columns = list(range(0, 6))
label_columns = [3, 4, 5]
feature_columns = list([2, 5])
label_columns = [5]
feature_and_label_columns = feature_columns + label_columns
label_in_feature_columns = (lambda x, y: [x.index(i) for i in y])(feature_columns, label_columns)
@ -34,7 +36,8 @@ class Config:
add_train = False
shuffle_train_data = True
train_data_rate = 0.95
# train_data_rate = 0.95 #comment yqy
train_data_rate = 1 # add yqy
valid_data_rate = 0.15
batch_size = 64
@ -50,10 +53,10 @@ class Config:
batch_size = 1
continue_flag = "continue_"
train_data_path = "./data.csv"
test_data_path = "./test.csv"
train_data_path = "./data/data.csv"
model_save_path = "./checkpoint/"
figure_save_path = "./figure/"
do_figure_save = False
if not os.path.exists(model_save_path):
os.mkdir(model_save_path)
@ -74,17 +77,14 @@ class Data:
self.train_num = int(self.data_num * self.config.train_data_rate)
self.mean = np.mean(self.data, axis=0)
self.std = np.std(self.data, axis=0)
self.norm_data = (self.data - self.mean) / self.std
self.start_num_in_test = 0
def read_data(self):
init_data = pd.read_csv(
self.config.train_data_path,
usecols=self.config.feature_and_label_columns
)
init_data = pd.read_csv(self.config.train_data_path,
usecols=self.config.feature_and_label_columns)
return init_data.values, init_data.columns.tolist()
def get_train_and_valid_data(self):
@ -112,22 +112,6 @@ class Data:
return train_x, valid_x, train_y, valid_y
def get_test_data(self, return_label_data=False):
init_data = pd.read_csv(
self.config.test_data_path,
usecols=self.config.feature_and_label_columns
)
norm_data = (init_data - self.mean) / self.std
feature_data = norm_data[:]
time_step_size = feature_data.shape[0] // self.config.time_step
test_x = [feature_data[0 + i * self.config.time_step: 0 + (
i + 1) * self.config.time_step]
for i in range(time_step_size)]
if return_label_data:
label_data = norm_data[0:, self.config.label_in_feature_columns]
return np.array(test_x), label_data
return np.array(test_x)
feature_data = self.norm_data[self.train_num:]
self.start_num_in_test = feature_data.shape[0] % self.config.time_step
time_step_size = feature_data.shape[0] // self.config.time_step
@ -140,31 +124,46 @@ class Data:
return np.array(test_x), label_data
return np.array(test_x)
# add yqy
def get_test_data_yqy(self, test_data_yqy=None):
if test_data_yqy is None:
test_data_yqy = []
# test_data_yqy=test_data_yqy[1:21]
feature_data = (test_data_yqy - self.mean) / self.std
test_x = [feature_data]
return np.array(test_x)
def draw(config, origin_data, predict_norm_data):
label_norm_data = origin_data.norm_data[origin_data.train_num + origin_data.start_num_in_test:,
config.label_in_feature_columns]
# add end
def draw_yqy(config, origin_data, predict_norm_data, mean_yqy, std_yqy): # 这里origin_data等同于test_data_values_yqy
label_norm_data = (origin_data - mean_yqy) / std_yqy
assert label_norm_data.shape[0] == predict_norm_data.shape[
0], "The element number in origin and predicted data is different"
label_name = [origin_data.data_column_name[i] for i in config.label_in_feature_columns]
label_column_num = len(config.label_columns)
# label_norm_data=label_norm_data[:,1]
label_name = 'high'
label_column_num = 1
loss = np.mean((label_norm_data[config.predict_day:] - predict_norm_data[:-config.predict_day]) ** 2, axis=0)
loss = \
np.mean((label_norm_data[config.predict_day:][:, 1] - predict_norm_data[:-config.predict_day][0:]) ** 2,
axis=0)[1]
print("The mean squared error of stock {} is ".format(label_name), loss)
label_X = range(origin_data.data_num - origin_data.train_num - origin_data.start_num_in_test)
predict_X = [x + config.predict_day for x in label_X]
# label_X = range(origin_data.data_num - origin_data.train_num - origin_data.start_num_in_test)
# predict_X = [x + config.predict_day for x in label_X]
label_data = label_norm_data * origin_data.std[config.label_in_feature_columns] + \
origin_data.mean[config.label_in_feature_columns]
label_data = label_norm_data[:, 1] * std_yqy[1] + mean_yqy[1]
predict_data = predict_norm_data * origin_data.std[config.label_in_feature_columns] + \
origin_data.mean[config.label_in_feature_columns]
predict_data = predict_norm_data * std_yqy[1] + mean_yqy[1]
print(label_data)
print(predict_data)
print(label_data[-1])
print(predict_data[-1])
PORT_NUMBER = 8080
lock = Lock()
@ -199,15 +198,35 @@ class MyHandler(BaseHTTPRequestHandler):
elif req.path == "/predict":
try:
job = query.get('job')[0]
gpu_model = query.get('gpu_model')[0]
time = query.get('time')[0]
data = {
'job': query.get('job')[0],
'model': query.get('model')[0],
'time': query.get('time')[0],
'utilGPU': query.get('utilGPU')[0],
'utilCPU': query.get('utilCPU')[0],
'pre': 0,
'main': 0,
'post': 0
}
with open(config.train_data_path, 'r') as f:
q = deque(f, config.time_step - 1)
df = pd.read_csv(StringIO(''.join(q)), usecols=config.feature_and_label_columns)
df.append(data, ignore_index=True)
df.to_csv('./data/test_data.csv')
np.random.seed(config.random_seed)
data_gainer = Data(config)
test_X, test_Y = data_gainer.get_test_data(return_label_data=True)
print(test_X, test_Y)
test_data_yqy = pd.read_csv("./data/test_data.csv", usecols=list(range(0, 8)))
test_data_values = test_data_yqy.values[:]
test_X = data_gainer.get_test_data_yqy(test_data_values)
pred_result = predict(config, test_X)
print(pred_result)
draw(config, data_gainer, pred_result)
mean = Data(config).mean
std = Data(config).std
draw_yqy(config, test_data_values, pred_result, mean, std)
msg = {'code': 1, 'error': "container not exist"}
except Exception as e:
msg = {'code': 2, 'error': str(e)}