Browse Source

简单的CNN

yufeng0528 4 years ago
parent
commit
50b8063d01
1 changed files with 54 additions and 13 deletions
  1. 54 13
      stock/cnn_train.py

+ 54 - 13
stock/cnn_train.py

@@ -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)