菜鸟先飞笔记——人工神经网络ANN理论及金融领域实践(中)

本文介绍了如何使用Python实现人工神经网络(ANN),从数据处理到模型训练,包括数据预处理、训练数据、权重初始化、激活函数等关键步骤。作者通过实例展示了在数字识别任务上的应用,并得到了88%的正确率。文章结尾预告将用神经网络应用于股价预测。
摘要由CSDN通过智能技术生成

四、用python实现它!

光说不练假把式,笔者这就带领客官用Anaconda做出一个识别数字的人工智能程序!!本文里面的所有代码与数据在笔者的github上能够找到:LanceChow

1、巧妇难为无米之炊,我们有什么数据?

在动手之前,我们来看看我们要用到什么数据,笔者的GitHub里面有三个csv文件,一个训练数:含有1000个数字的数据,两个测试数据:一个10个数字,另一个100个数字。我们打开含有10个数字的测试文件看一下:在这里插入图片描述
OMG,这都是些啥???
笔者解释一下,大家可以看到图片最左端一列有序号:1,2,3,4,5,6,7,8,下面就看不到了,这指的是第几行!看图,也就是说第一行数据有4排(懂我意思吧),第一个数字为“7”,后面28*28=784个数字像素,把这些像素描出来,就可以看到一个手写的数字“7”。
在画图过程中,我们需要用到两个包:numpy以及matplotlib。

import matplotlib.pyplot
import numpy
#读取数据文件,我们先用小一点的测试文件mnist_test_10.csv来
#请把所有数据放在一个文件夹,以往路径出错
test_file = open("mnist_test_10.csv")import matplotlib.pyplot
test_data = test_file.readlines()
test_file.close()

#test_data为列表数据,每一行中的785个数字用“,”隔开,我们提取第一个数字“7”的数据并分割
#该数据位于第一行,因此python语言中序号为0
all_values = test_data[0].split(",")

#我们在画图前,需要把数据清洗为画图函数能够识别的数据
#得到像素数据:除了第一个数字7,其他784个数字构成28*28矩阵
image_array = numpy.asfarray(all_values[1:]).reshape((28,28))
matplotlib.pyplot.imshow(image_array, cmap='Greys')

显示的结果为:

在这里插入图片描述

2、处理训练数据:得到input和真实值

导入数据

#读入训练数据
train_file = open("mnist_train_1000.csv")
train_data = train_file.readlines()
train_file.close()

我们有如下几点需要考虑:

  1. 在一次训练中,我们用一个数据,而训练1000个数据我们需要建立一个循环,遍历test_data中的所有行。
  2. 一个数据含有输入矩阵:784行、1列,但像素的范围是0~255,本文选取的激活函数为 s i g m o i d sigmoid sigmoid函数,取值大于5时,函数值就接近1,而且在打下去,变化不大。因此我们希望把输入规定在一个较小的范围,比如[0,1],但是为了避免输入为0时权重失效的情况发生,我们把范围确定在[0.01,1]。(具体原因,菜鸟不知)
  3. 真实值:1个数。然而真实值我们不用简简单单的一个数,而是用一种Hot-coding的方法转换成10个数,什么意思呢,比如数字7,变成 [ 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 ] T [0,0,0,0,0,0,1,0,0]^T [0,0,0,0,0,0,1,0,0]T,第七个数字为1,其他行的数字为0的矩阵,原因是什么?笔者作为菜鸟当然不知道,但笔者感叹于这种思维:划时代的成就需要的是创新性的思维,而不是靠死记硬背计算。
    同理,真实值“0”,转化为 [ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] T [1,0,0,0,0,0,0,0,0]^T [1,0,0,0,0,0,0,0,0]T

因此,代码为

#建立循环
for record in train_data:
    all_values = record.split(",")
   	inputs = (numpy.asfarray(all_values[1:]) / 255.0 * 0.99) + 0.01
    inputs = numpy.array(inputs, ndmin=2).T
    targets = numpy.zeros(10) + 0.01
    targets[int(all_values[0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值