|
@@ -2,17 +2,22 @@ import keras
|
2
|
2
|
# -*- encoding:utf-8 -*-
|
3
|
3
|
import numpy as np
|
4
|
4
|
from keras.models import Sequential
|
5
|
|
-from keras.layers import Dense,Dropout
|
|
5
|
+# 优化方法选用Adam(其实可选项有很多,如SGD)
|
|
6
|
+from keras.optimizers import Adam
|
6
|
7
|
import random
|
7
|
8
|
from keras.models import load_model
|
8
|
9
|
from imblearn.over_sampling import RandomOverSampler
|
9
|
10
|
from keras.utils import np_utils
|
|
11
|
+# 用于模型初始化,Conv2D模型初始化、Activation激活函数,MaxPooling2D是池化层
|
|
12
|
+# Flatten作用是将多位输入进行一维化
|
|
13
|
+# Dense是全连接层
|
|
14
|
+from keras.layers import Conv2D, Activation, MaxPool2D, Flatten, Dense
|
10
|
15
|
|
11
|
16
|
|
12
|
17
|
def read_data(path):
|
13
|
18
|
lines = []
|
14
|
19
|
with open(path) as f:
|
15
|
|
- for x in range(40000):
|
|
20
|
+ for x in range(10000):
|
16
|
21
|
lines.append(eval(f.readline().strip()))
|
17
|
22
|
|
18
|
23
|
random.shuffle(lines)
|
|
@@ -35,19 +40,55 @@ def read_data(path):
|
35
|
40
|
return X_resampled,y_resampled,np.array(test_x),np.array(test_y)
|
36
|
41
|
|
37
|
42
|
train_x,train_y,test_x,test_y=read_data("D:\\data\\quantization\\stock6.log")
|
|
43
|
+train_x = train_x.reshape(train_x.shape[0], 1,80,5)
|
|
44
|
+test_x = test_x.reshape(test_x.shape[0], 1,80,5)
|
|
45
|
+# train_y = train_y.reshape(train_y.shape[0],3)
|
|
46
|
+# 调用此次训练的数据集
|
|
47
|
+from keras.datasets import mnist
|
|
48
|
+import numpy as np
|
|
49
|
+np.random.seed(1337)
|
|
50
|
+
|
|
51
|
+# 加载数据
|
|
52
|
+# (X_train,Y_train),(X_test,Y_test) = mnist.load_data()
|
38
|
53
|
|
39
|
54
|
model = Sequential()
|
40
|
|
-model.add(Dense(units=635, input_dim=400, activation='relu'))
|
41
|
|
-model.add(Dense(units=525, activation='relu'))
|
42
|
|
-model.add(Dense(units=525, activation='relu'))
|
43
|
|
-model.add(Dropout(0.2))
|
44
|
|
-model.add(Dense(units=525, activation='relu'))
|
45
|
|
-model.add(Dropout(0.2))
|
46
|
|
-model.add(Dense(units=425, activation='relu'))
|
47
|
|
-model.add(Dropout(0.2))
|
48
|
|
-model.add(Dense(units=366, activation='relu'))
|
49
|
|
-model.add(Dense(units=3, activation='softmax'))
|
50
|
|
-model.compile(loss='categorical_crossentropy', optimizer="adam",metrics=['accuracy'])
|
|
55
|
+# model.add(Dense(units=635, input_dim=400, activation='relu'))
|
|
56
|
+# model.add(Dense(units=3, activation='softmax'))
|
|
57
|
+# model.compile(loss='categorical_crossentropy', optimizer="adam",metrics=['accuracy'])
|
|
58
|
+
|
|
59
|
+# 模型卷积层设计
|
|
60
|
+model.add(Conv2D(
|
|
61
|
+ nb_filter=32, # 第一层设置32个滤波器
|
|
62
|
+ nb_row=3,
|
|
63
|
+ nb_col=15, # 设置滤波器的大小为5*5
|
|
64
|
+ padding='same', # 选择滤波器的扫描方式,即是否考虑边缘
|
|
65
|
+ input_shape=(1,80,5), # 设置输入的形状
|
|
66
|
+ # batch_input_shape=(64, 1, 28, 28),
|
|
67
|
+))
|
|
68
|
+# 选择激活函数
|
|
69
|
+model.add(Activation('relu'))
|
|
70
|
+
|
|
71
|
+# 设置下采样(池化层)
|
|
72
|
+model.add(MaxPool2D(
|
|
73
|
+ pool_size=(2,2), # 下采样格为2*2
|
|
74
|
+ strides=(2,2), # 向右向下的步长
|
|
75
|
+ padding='same', # padding mode is 'same'
|
|
76
|
+))
|
|
77
|
+
|
|
78
|
+# 使用Flatten函数,将输入数据扁平化(因为输入数据是一个多维的形式,需要将其扁平化)
|
|
79
|
+model.add(Flatten()) # 将多维的输入一维化
|
|
80
|
+model.add(Dense(1024)) # 全连接层1024个点
|
|
81
|
+model.add(Activation('relu'))
|
|
82
|
+
|
|
83
|
+# 在建设一层
|
|
84
|
+model.add(Dense(3)) # 输入是个类别
|
|
85
|
+model.add(Activation('softmax')) # 用于分类的softmax函数
|
|
86
|
+
|
|
87
|
+adam = Adam() # 学习速率lr=0.0001
|
|
88
|
+
|
|
89
|
+model.compile(optimizer=adam,
|
|
90
|
+ loss='categorical_crossentropy',
|
|
91
|
+ metrics=['accuracy'])
|
51
|
92
|
|
52
|
93
|
print("Starting training ")
|
53
|
94
|
h=model.fit(train_x, train_y, batch_size=64, epochs=14, shuffle=True)
|