import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
tf.compat.v1.disable_eager_execution() #要想运行session必须加这句话
data=np.linspace(1,15,15) #linspace 用来赋值,15分成15份
endprice=np.array([2511.90,2538,2657,2686,2767,2780,2787,2822,2867,2889,2929,2989,2999,2890,2988])
beginprice=np.array([2438,2534,2682,2644,2743,2877,2646,2879,2899,2780,2987,2966,2899,2900,2920])
print (data)
plt.figure()
for i in range(0,15):
# 1 柱状图
dateone=np.zeros([2])
dateone[0]=i;
dateone[1]=i;
priceone=np.zeros([2])
priceone[0]=beginprice[i]
priceone[1]=endprice[i]
if endprice[i]>beginprice[i]:
plt.plot(dateone,priceone,'r',lw=8)
else:
plt.plot(dateone,priceone,'g',lw=8)
# plt.show()
# A(15*1)*w1(1*10)+b1(1*10)=B(15*10)
# B(15*10)*w2(10*1)+b2(15*1)=C(15*1)
# 1 A B C
# A
datenormal=np.zeros([15,1])# np.zeros(),数组赋值全0
pricenormal=np.zeros([15,1])
for i in range(0,15):
datenormal[i,0]=i/14.0;
pricenormal[i,0]=endprice[i]/3000.0;
x=tf.compat.v1.placeholder(tf.float32,[None,1])
y=tf.compat.v1.placeholder(tf.float32,[None,1])
# B
w1=tf.Variable(tf.compat.v1.random_uniform([1,10],0,1))
b1=tf.Variable(tf.zeros([1,10]))
wb1=tf.matmul(x,w1)+b1 #计算隐藏层的wb1值
layer1=tf.nn.relu(wb1) #激励函数
# C
w2=tf.Variable(tf.compat.v1.random_uniform([10,1],0,1)) # 新版本中旧的session不能用就加 compat.v1.
b2=tf.Variable(tf.zeros([15,1]))
wb2=tf.matmul(layer1,w2)+b2
layer2=tf.nn.relu(wb2)
loss=tf.reduce_mean(tf.square(y-layer2)) # 计算标准差,也就是求不断逼近真实参数时所用的数据
train_step=tf.compat.v1.train.GradientDescentOptimizer(0.1).minimize(loss) #用梯度下降法不断逼近真实参数,0.1是梯度下降法的步伐大小
with tf.compat.v1.Session() as sess:
sess.run(tf.compat.v1.global_variables_initializer())
for i in range(0,10000):
sess.run(train_step,feed_dict={x:datenormal,y:pricenormal})
# 经过51行的运算,得到一个训练后的 w1w2 b1b2,现在检测一下是否有效,
#给一个新的输入层,通过输入层,加上训练后的wb,得到一个新的 预测值,放到layer2中,然后绘制出来,看和最初的原始图像是否相近或者一样
pred=sess.run(layer2,feed_dict={x:datenormal})
predprice=np.zeros([15,1])
for i in range(0,15):
predprice[i,0]=(pred*3000)[i,0]
plt.plot(data,predprice,'b',lw=1)
plt.show()
这是赋值之后print的股价柱状图:
这是使用神经网络训练之后模型得到的股价逼近柱状图: