这里我们运用简单的神经网络模拟一下股票的收盘价格,是一个学习的示例。

首先要知道,股票曲线图的参数意义:

这个曲线图主要记录股票的开盘价格和收盘价格,如果开盘价格低于收盘价格,那么证明这个股票在增长,每天的规律如此,所以,在下面,首先定义股票价格的坐标图如下:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
data = np.linspace(1, 15, 15)            # linspace的功能用来创建等差数列
endPrice = np.array([2511.6, 2538.6, 2510.3, 2591.6, 2732.9, 2701.69, 2702.69, 2703.69, 2704.69, 2721.69, 2711.69, 2711.69, 2721.69, 2731.69, 2741.69])         # 收盘价格
beginPrice = np.array([2438.7, 2500.9, 2534.9, 2512.6, 2594.6, 2743.26, 2753.26, 2752.26, 2754.26, 2751.26, 2732.26, 2725.26, 2745.26, 2756.26, 2737.26])       # 开盘价格
print(data)                             # 1-15天
plt.figure()
for i in range(0, 15):'''柱状图'''dateOne = np.zeros([2])             # 生成一个一行两列全为0的矩阵,分别赋值dateOne[0] = idateOne[1] = ipriceOne = 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()

画出来的结果图为:

首先,这个原始的柱状图,画出来了,股票图形的绘制就是这样了。接下来的就是神经网络的认识了:

首先矩阵相乘的知识,我们要知道:

L1(a,b)*L2(c,d)=L3(a,d)

矩阵的维度变化是这样的,行列的数是这个规律。接下来就是神经网络的结构的说明了:

首先,我们需要知道的是:神经网络是大体可以分为三层结构的,第一层(输入层)第二层(隐藏层,可以有多层)第三层(输出层),在我们的这个问题上,这里的输入层为日期,即为15天,且可以看作是一个15x1的矩阵,这里的隐藏层则可以规定为一个10x1的矩阵,这个隐藏层的设计可以根据数据来合理设计,这里的输出层和输入层一样,我们需要得到对应天数预测得到的股票的收盘的值,所以也是15x1。在这里,我们把输入矩阵看作是A,中间层即隐藏层看作是B,输出层(每天都股价)可以看作是C。

其次,我们需要知道的是中间层的值B,是由输入层的值乘以一个权重值w1,然后加上偏执值b1得到的,即可以用上图表示。同理,C的值也是如此。这个就是简单的神经网络结构,接下来,其中神经网络的细节如下:

这里一层到二层,二层到三层即为B的值怎么得到的,的值怎么得到的,上面也有比较详细的叙述,然后接下来,我们需要知道的是其中神经网网络整个数据的维度的变化了,以上图可以看出,经过一系列的运算,最后输入和输出的维度是相同的。

最后,我们需要知道的是,其中神经网络的调参的过程了,如果说第一次循环的神经网络得到的预测值是2400,然后实际值是2511,这里预测值和实际值是相差111点的,所以,我们的目的是将这个预测值和实际值缩小,而这里的预测值是C,能够让C变化,更贴近真实值,我们这里的输入A变不了,而B又是由A得到的,所以能变的就是这些W1和B1,W2和B2这些值了,我们利用梯度下降法来减少真实值和预测值的差异,(此处先不讲梯度下降,之后的博客会进行相应的更新说明),经过一次次的循环训练,我们会将这四个参数值进行调节,调节至预测值和真实值是我们想要的那个结果为止,或者说可以控制循环,我们要求循环多少次为止。

接下来就是实现整个神经网络的部分了,下面的代码中也有详细的介绍,相关注释对代码有一个大体的把握:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
data = np.linspace(1, 15, 15)            # linspace的功能用来创建等差数列
endPrice = np.array([2511.6, 2538.6, 2510.3, 2591.6, 2732.9, 2701.69, 2702.69, 2703.69, 2704.69, 2721.69, 2711.69, 2711.69, 2721.69, 2731.69, 2741.69])         # 收盘价格
beginPrice = np.array([2438.7, 2500.9, 2534.9, 2512.6, 2594.6, 2743.26, 2753.26, 2752.26, 2754.26, 2751.26, 2732.26, 2725.26, 2745.26, 2756.26, 2737.26])       # 开盘价格
print(data)                             # 1-15天
plt.figure()
for i in range(0, 15):'''柱状图'''dateOne = np.zeros([2])             # 生成一个一行两列全为0的矩阵,分别赋值dateOne[0] = idateOne[1] = ipriceOne = 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(15x1)*W1(1x10)+b1(1x10)=B(15x10)'''
'''B(15x10)*W2(10x1)+b2(15x1)=C(15x1)'''
dateNormal = np.zeros([15, 1])
priceNormal = np.zeros([15, 1])
for i in range(0, 15):dateNormal[i, 0] = i/14.0priceNormal[i, 0] = endPrice[i]/3000.0
x = tf.placeholder(tf.float32, [None, 1])
y = tf.placeholder(tf.float32, [None, 1])
# B的定义,隐藏层
w1 = tf.Variable(tf.random_uniform([1, 10], 0, 1))       # 在0-1之间取10个数
b1 = tf.Variable(tf.zeros([1, 10]))                      # 建一个一行十列的矩阵
wb1 = tf.matmul(x, w1)+b1                                # 得到B
layer1 = tf.nn.relu(wb1)                                 # 激活函数,完成wb1的映射,以后再进行描述
# C的定义,输出层
w2 = tf.Variable(tf.random_uniform([10, 1], 0, 1))
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))             # 标准差的损失函数,之后再进行描述
# 定义我们每次调参的步长,我们选择梯度下降法,作用是缩小loss,减小预测值和真实值的差异,通过不断调整w和b
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
with tf.Session() as sess:sess.run(tf.global_variables_initializer())                   # 完成数据的初始化# 定义中止的条件,有两个,定义真实值和预测值之间的差异,比如说差别2%中止,或者说定义循环的次数,在这里定义循环100次中止for i in range(0, 1000):sess.run(train_step, feed_dict={x: dateNormal, y: priceNormal})# 经过10000次训练之后,输出了一组优化后的w1,w2,b1,b2。那么我们怎么检测这些参数呢/我们可以喂入之前的输出的值预测绘制相应的曲线去验证prediction = sess.run(layer2, feed_dict={x: dateNormal})predictionPrice = np.zeros([15, 1])for i in range(0, 15):predictionPrice[i, 0] = (prediction*3000)[i, 0]            # 这里乘以300是为了恢复预测值,之前处以了3000plt.plot(data, predictionPrice, 'b', lw=1)
plt.show()

下面是运行的结果图:

可以看出来,模拟的蓝色的曲线的预测值还是和真实值相对吻合的。

计算机视觉基础系列(python与opencv的操作与运用/tensorflow的基础介绍)(八)---小例子(神经网络逼近股票收盘价格)相关推荐

  1. 学python需要什么基础知识-Python的学习,都需要具备哪些计算机基础知识?

    原标题:Python的学习,都需要具备哪些计算机基础知识? 首先 ,Python 语言可以完全从零基础学习 , 即使没有任何计算机基础.通过系统化的学习过程 , 同时也能掌握 Python 编程. 虽 ...

  2. c# 计算空格宽度像素_分享计算机视觉之图像处理Python之opencv

    start 计算机视觉 计算机视觉信息的处理技术主要依赖于图像处理方法,经过处理后输出图像的质量得到相当程度的改善,既改善了图像的视觉效果,又便于计算机对图像进行分析.处理和识别. 01 ♡♡♡ &q ...

  3. python学习-列表的操作(常用函数均会介绍)

    列表的操作 基本操作 进阶 附加内容 基本操作 本文中的基本操作有:获取最大,最小值,获取某个元素在列表中出现的次数. 列表的append,insert,remove,以及下标取值,赋值. 列表的扩展 ...

  4. 用Python自动化管理邮件简直太方便了,三个实用小例子带你体会!

    ‍‍ 大家好,我是早起. 在之前的文章中我们已经了解如何对自己的邮箱做一些代码操作前的基础配置,以及通过 Python 代码收发.读取邮件.本文将简单复习之前的部分重点内容,并通过 3 个小案例进一步 ...

  5. 计算机基础系列一:计算机硬件

    计算机基础系列一:计算机硬件 阅读目录 一 为何要学习计算机基础 二 本节目标 三  计算机硬件发展史 四:计算机硬件介绍 4.1 处理器 4.2 存储器 4.3 磁盘 4.4 磁带 4.5 输入输出 ...

  6. python一个月能挣多少钱-零基础学python,我可以让你一个月上手做项目!

    今天达内python培训想要跟所有零基础学习python的同学分享一些神操作,这些操作可以让你在一个月上手做项目,我准备好了,你呢? 为什么你的Python学习效率如此之低?学了3个月还不会做项目做爬 ...

  7. Informatica基础系列(二)——更新策略转换组件

    目录: Informatica基础系列(零)--前言 Informatica基础系列(一)--Helloworld Informatica基础系列(二)--更新策略转换组件 Informatica基础 ...

  8. JVM基础系列第7讲:JVM 类加载机制

    当 Java 虚拟机将 Java 源码编译为字节码之后,虚拟机便可以将字节码读取进内存,从而进行解析.运行等整个过程,这个过程我们叫:Java 虚拟机的类加载机制.JVM 虚拟机执行 class 字节 ...

  9. 0基础学python难吗-0基础学Python有多难?该怎么入门?

    0基础学Python有多难?该怎么入门?零基础学Python并不难,因为Python是一门非常适合初学者入门的编程语言.Python语法简单明了,代码可读性很高,容易入门.但Python对代码的要求非 ...

最新文章

  1. 2018-3-19 损失函数与适应度函数,稳定选择与分裂选择
  2. 用滑动窗口来解决最长无重复子串问题
  3. 浏览器时间久了重新登录_以登录为例讲解什么是全面的测试设计
  4. [BUUCTF-pwn]——[BJDCTF 2nd]test
  5. ios项目icon和default图片命名规则
  6. 永不示弱_永不过时的网页设计:今天和2000年的在线投资组合
  7. 手写AspNetCore 认证授权代码
  8. WebSnapshotsHelper(HTML转换为图片)
  9. 使用SqlCommandBuilder
  10. 什么是“好的”测试用例?
  11. Viscosity for Mac(好用的Open客户端)
  12. Andrew ng 深度学习课程笔记
  13. BIM学习笔记(一)
  14. 各版本的QT源码下载地址
  15. java 程序计数器_JVM入门系列之程序计数器
  16. DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理
  17. java实现用用户头像代替小程序码的logo(任意图片替换小程序码logo)
  18. 在计算机系统中对文件执行彻底删除,怎么让电脑删除文件时可以直接彻底进行删除...
  19. Mac 上简体中文输入方式的键盘快捷键
  20. etcher刻录以后U盘容量只有12M,如何恢复容量?

热门文章

  1. CREO1——CREO 2.0画沉头孔
  2. 苹果8参数配置_苹果12与苹果12Pro相比较有哪些区别?哪个更值得购买?
  3. 如何翻译图片?这些实用方法值得收藏
  4. python turtle 绘图小猪佩奇_python3用turtle库进行绘制小猪佩奇图案
  5. 史上最全Windows安全工具锦集
  6. 现代富文本编辑器Quill的内容渲染机制
  7. 戴尔服务器改win7系统,戴尔电脑怎么把Win10系统改装win7系统?
  8. Intranet+Intranet QA-11/20 游记
  9. 传统银行业务的数字化转型-中原银行大数据建设实践
  10. 桌面的回收站或IE图标不见后的解决办法