# encoding:utf-8
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
date = np.linspace(1, 15, 15)
# 当天的收盘价格
endPrice = np.array([2511.90,2538.26,2510.68,2591.66,2732.98,2701.69,2701.29,2678.67,2726.50,2681.50,2739.17,2715.07,2823.58,2864.90,2919.08]
)
# 当天的开盘价格
beginPrice = np.array([2438.71,2500.88,2534.95,2512.52,2594.04,2743.26,2697.47,2695.24,2678.23,2722.13,2674.93,2744.13,2717.46,2832.73,2877.40])
print(date) # 打印日期
plt.figure()
for i in range(0,15):
# 通过循环遍历数据画出柱状图
dateOne = np.zeros([2])
dateOne[0] = i
dateOne[1] = i
print(dateOne)
priceOne = np.zeros([2])
priceOne[0] = beginPrice[i]
priceOne[1] = endPrice[i]
if endPrice[i] > beginPrice[i]:
# 如果收盘价格大于开盘价格说明股票上涨 用红色表示 lw为线条粗细
plt.plot(dateOne, priceOne,'r',lw=8)
else:
# 如果收盘价格小于开盘价格说明股票下跌 用绿色表示 lw为线条粗细
plt.plot(dateOne, priceOne,'g',lw=5)
# plt.show()
# A(15x1)*w1(1x10)+b1(1*10) = B(15x10) 输入层到中间层的维度变化
# B(15x10)*w2(10x1)+b2(15x1) = C(15x1) 中间层到输出层的维度变化
# 1 A B C
dateNormal = np.zeros([15,1])
priceNormal = np.zeros([15,1])
# 日期和价格进行归一化处理
for i in range(0, 15):
dateNormal[i, 0] = i/14.0
priceNormal[i, 0] = endPrice[i]/3000.0
print("日期和价格归一化处理的结果")
print(dateNormal)
print(priceNormal)
x = tf.placeholder(tf.float32, [None, 1]) # 输入 表明是N行1列的
y = tf.placeholder(tf.float32, [None, 1]) # 输出 表明是N行1列的
# B
w1 = tf.Variable(tf.random_uniform([1, 10], 0, 1)) # 权重值 可以通过误差修改值 1行10行的矩阵 随机生成的值范围是0-1
b1 = tf.Variable(tf.zeros([1, 10])) # 可变值 可以通过误差修改值
wb1 = tf.matmul(x, w1)+b1 # A(15x1)*w1(1x10)+b1(1*10) = B(15x10) 输入层到中间层的维度变化
layer1 = tf.nn.relu(wb1) # 激励函数 映射成另一个值
# 第一层到第二层完毕
# C
w2 = tf.Variable(tf.random_uniform([10, 1], 0, 1)) # 权重值 可以通过误差修改值 1行10行的矩阵 随机生成的值范围是0-1
b2 = tf.Variable(tf.zeros([15, 1]))
wb2 = tf.matmul(layer1, w2)+b2 # B(15x10)*w2(10x1)+b2(15x1) = C(15x1) 中间层到输出层的维度变化
layer2 = tf.nn.relu(wb2) # 激励函数 映射成另一个值
# 第二到第三层完毕
# 误差用loss表示 实际是一个标准差
loss = tf.reduce_mean(tf.square(y-layer2)) # y是真实的值 layer2是计算的值, 两者差值开方,再求其均值
# 每次调整的步长 梯度下降0.1 来调整权重和偏移查,目的是缩小loss减小真实值与误差值的差异
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer()) # 初始化
for i in range(0, 10000): # 训练次数为10000
#追根溯源需要传入两个参数 x 和 y
sess.run(train_step, feed_dict={x: dateNormal, y: priceNormal})
# 通过上面的循环,我们已经训练成一组优化的w1 w2,那我们我们用下面的方法来检测下w1 w2的准确性
# w1w2 b1b2 A + wb -->layer2
pred = sess.run(layer2, feed_dict={x: dateNormal})
predPrice = np.zeros([15, 1]) # 预测结果
for i in range(0, 15): # 还原数据需要*3000
predPrice[i, 0] = (pred*3000)[i, 0]
plt.plot(date, predPrice, 'b', lw=1)
plt.show()
Python实现人工神经网络逼近股票价格 3 代码实现
猜你喜欢
转载自blog.csdn.net/xfb1989/article/details/105450383
今日推荐
周排行