import tensorflow as tf
from tensorflow import keras
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tushare as ts
# data=pd.read_csv('../data/000001.csv')[::-1]
pro = ts.pro_api("14228e4f55d83c97143a1decbdf5da3b17d42da9c690a9c9154e0866")
data = pro.daily(ts_code='000001.SZ', start_date='20210201', end_date='20210714')[::-1]
#self.kline.to_csv('000001.csv')
data.index=data.index[::-1]
data['trade_date']=pd.to_datetime(data['trade_date'])
# print(data)
# print(data.iloc[0:5,3:7])
input_data=data.iloc[0:-1,2:6]
# print(input_data)
output_data=data.iloc[1:,2:3]
# output_data_list=[]
# for item in output_data:
# for i in range(7):
# output_data_list.append()
# print(output_data[0:1])
# print(data['trade_date'])
# 设置模型的层
model = keras.Sequential([
keras.layers.Dense(1, input_shape=(4,)), #第一个 Dense 层有 1 个节点(或神经元)
keras.layers.Dense(200), #第一个 Dense 层有 200 个节点(或神经元)
keras.layers.Dense(200), #第一个 Dense 层有 200 个节点(或神经元)
# keras.layers.Dense(100), #第一个 Dense 层有 100 个节点(或神经元)
keras.layers.Dense(1) # 最后一个层会返回一个长度为 1 的 logits 数组
])
model.summary()
# 编译模型
model.compile(optimizer='adam',
loss='mse',
metrics=['accuracy'])
# 上面的三个参数:
# 损失函数 - 用于测量模型在训练期间的准确率。您会希望最小化此函数,以便将模型“引导”到正确的方向上。
# 优化器 - 决定模型如何根据其看到的数据和自身的损失函数进行更新。
# 指标 - 用于监控训练和测试步骤。以下示例使用了准确率,即被正确分类的图像的比率。
# 开始训练,请调用 model.fit 方法,这样命名是因为该方法会将模型与训练数据进行“拟合”
model.fit(input_data, output_data, epochs=5000)
# 上面三个参数的意义:
# 1、输入的数据。
# 如果模型只有一个输入,那么x的类型是numpy array
# 如果模型有多个输入,那么x的类型应当为list,list的元素是对应于各个输入的numpy array
# 2、对应输入数据的标签。与输入数据一一对应
# 3、训练的次数。整数,训练终止时的epoch值,训练将在达到该epoch值时停止
# 比较模型在测试数据集上的表现
# test_loss, test_acc = model.evaluate(x, y, verbose=2)
#
# print('\nTest accuracy:', test_acc)
predictions = model.predict(input_data)
# 绘图
# 用来显示中文的设置,有中文出现的情况,需要u'内容'
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.plot(data.trade_date[:-1],input_data['open'])
plt.plot(data.trade_date[:-1],predictions,'r')
plt.xlabel('日期') #X轴内容
plt.ylabel('价格')
plt.title('平安银行股票预测价格与真实价格对比') #标题
plt.legend(labels=['真实', '预测'])
# print(predictions)
plt.show()
# 将模型保存
checkpoint_path = "model/cp-{epoch:04d}.ckpt"
model.save_weights(checkpoint_path.format(epoch=2))
- 1
- 2
- 3
- 4
- 5
- 6
前往页