GRU实现股票预测(代码)

在TensorFlow2.0,python3.7环境下运行
先创建一个TensorFlow文件,文件名为tushareDemo,运行以下代码

import tushare as ts
import matplotlib.pyplot as plt
df1=ts.get_k_data('600519',ktype='D',start='2010-04-26',end='2020-04-06')
datapath1="./SH600519.csv"
df1.to_csv(datapath1)

再建一个TensorFlow文件,名为stock_predict运行以下代码

import tensorflow as tf
import numpy as np
from tensorflow.keras.layers import  Dropout,Dense,GRU
import matplotlib.pyplot as plt
import os
import pandas as pd
from  sklearn.preprocessing import MinMaxScaler
from  sklearn.metrics import  mean_absolute_error,mean_squared_error
import math
maotai=pd.read_csv('./SH600519.CSV')
training_set=maotai.iloc[0:2426-300, 2:3].values
test_set=maotai.iloc[2426-300:, 2:3].values
sc=MinMaxScaler(feature_range=(0, 1))
training_set_scaled = sc.fit_transform(training_set)##求得训练集的最大值,最小值这些训练集固有的属性,并在训练集上进行归一化
test_set=sc.transform(test_set)#利用训练集的属性对测试集进行归一化
x_train=[]
y_train=[]
x_test=[]
y_test=[]
for i in range(60,len(training_set_scaled)):
    x_train.append(training_set_scaled[i-60:i,0])
    y_train.append(training_set_scaled[i,0])
np.random.seed(7)
np.random.shuffle(x_train)
np.random.seed(7)
np.random.shuffle(y_train)
tf.random.set_seed(7)
x_train,y_train=np.array(x_train),np.array(y_train)
x_train=np.reshape(x_train,(x_train.shape[0],60,1))
for i in range(60,len(test_set)):
    x_test.append(test_set[i-60:i,0])
    y_test.append(test_set[i,0])
x_test,y_test=np.array(x_test),np.array(y_test)
x_test=np.reshape(x_test,(x_test.shape[0],60,1))
model=tf.keras.Sequential([GRU(80,return_sequences=True),
                           Dropout(0.2),
                           GRU(100),
                           Dropout(0.2),
                           Dense(1)
                           ])
model.compile(optimizer=tf.keras.optimizers.Adam(0.01),
              loss='mean_squared_error')#损失函数用均方误差
checkpoint_save_path="./checkpoint/stock.ckpt"
if os.path.exists(checkpoint_save_path+'.index'):
    print('-------------load the model---------')
    model.load_weights(checkpoint_save_path)
cp_callback=tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,save_weights_only=True,save_best_only=True,monitor='val_loss')
history=model.fit(x_train,y_train,batch_size=64,epochs=50,validation_data=(x_test,y_test),validation_freq=1,callbacks=[cp_callback])
model.summary()
file=open('./weights.txt','w')#参数提取
for v in model.trainable_variables:
    file.write(str(v.name)+'\n')
    file.write(str(v.shape)+'\n')
    file.write(str(v.numpy())+'\n')
file.close()
loss=history.history['loss']
val_loss=history.history['val_loss']
plt.plot(loss,label='Training Loss')
plt.plot(val_loss,label='Validation Loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.show()
predicted_stock_price=model.predict(x_test)
predicted_stock_price=sc.inverse_transform(predicted_stock_price)
real_stock_price=sc.inverse_transform(test_set[60:])
plt.plot(real_stock_price,color='red',label='MaoTai Stock Price')
plt.plot(predicted_stock_price,color='blue',label='Predicted MaoTai Stock Price')
plt.title('MaoTai Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('MaoTai Stock Price')
plt.legend()
plt.show()
mse=mean_squared_error(predicted_stock_price,real_stock_price)
rmse=math.sqrt(mean_squared_error(predicted_stock_price,real_stock_price))
mae=mean_absolute_error(predicted_stock_price,real_stock_price)
print('均方误差:%.6f'%mse)
print('均方根误差:%.6'%rmse)
print('平均绝对误差:%。6f'%mae)



你可能感兴趣的:(深度学习,神经网络,python,tensorflow,深度学习)