Python implementa una red neuronal artificial para abordar la implementación del código de precio de acciones 3

# 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()

 

92 artículos originales publicados · Me gusta5 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/xfb1989/article/details/105450383
Recomendado
Clasificación