在本文中,将训练本地计算机进行加法自主学习(之后还有减法与混合学习)。本项目可改性较高,资源以上传至资源库。 通过让机器学习随机的加法数据以及答案自主分析,自主学习与加法有关的知识,并进行输出随机的加法算式答案(有细微误差,但都保持在0.1以内。输出中最大误差为算式 本项目运用IDLE编写,需通过cmd事先安装 math、random、string库。 初始化、定义random函数,先随机生成一个加法算式(两个随机数字)。再初始、定义化各个学习模块和输出模块。 为了更清楚空了几行~ 对刚刚随机输出的加法算式及其答案进行学习,并尝试自主解加法运算,如答案错误,便重新学习,并输出错误结果并做标记;如答案正确,便继续运行至下个环节。 机器做出近似正确答案后输出,并显示学习结果。 下面是输出结果: 文件已上传,由于比较长这里就不汇总了。记得关注凉了本凉后到资源库中下载哦!(也可复制上面的再自行汇总) 本项目与之前的一样,有很强的可改性,可大幅度自定义,让机器学习其他行为。本程序只是机器学习的一种方案。(以后还会有其他方案教程) 后可能会有关于自己训练程序的文章~ 六年级凉了本人,请支持~
用python训练计算机进行自主学习
实现效果
[0.3, 0.4] -> [0.7302519951913294]
)
(程序流程图)程序编写
初始化各参数(随机训练数)
import math import random import string random.seed(0) def rand(a, b): return (b-a)*random.random() + a def makeMatrix(I, J, fill=0.0): m = [] for i in range(I): m.append([fill]*J) return m def sigmoid(x): return math.tanh(x) def dsigmoid(y): return 1.0 - y**2
定义训练数字与学习对象(进行学习)
class NN: def __init__(self, ni, nh, no): self.ni = ni + 1 self.nh = nh self.no = no self.ai = [1.0]*self.ni self.ah = [1.0]*self.nh self.ao = [1.0]*self.no self.wi = makeMatrix(self.ni, self.nh) self.wo = makeMatrix(self.nh, self.no) for i in range(self.ni): for j in range(self.nh): self.wi[i][j] = rand(-0.2, 0.2) for j in range(self.nh): for k in range(self.no): self.wo[j][k] = rand(-2.0, 2.0) self.ci = makeMatrix(self.ni, self.nh) self.co = makeMatrix(self.nh, self.no) def update(self, inputs): if len(inputs) != self.ni-1: raise ValueError('wrong number of inputs') for i in range(self.ni-1): self.ai[i] = inputs[i] for j in range(self.nh): sum = 0.0 for i in range(self.ni): sum = sum + self.ai[i] * self.wi[i][j] self.ah[j] = sigmoid(sum) for k in range(self.no): sum = 0.0 for j in range(self.nh): sum = sum + self.ah[j] * self.wo[j][k] self.ao[k] = sigmoid(sum) return self.ao[:] def backPropagate(self, targets, N, M): if len(targets) != self.no: raise ValueError('wrong number of target values') output_deltas = [0.0] * self.no for k in range(self.no): error = targets[k]-self.ao[k] output_deltas[k] = dsigmoid(self.ao[k]) * error hidden_deltas = [0.0] * self.nh for j in range(self.nh): error = 0.0 for k in range(self.no): error = error + output_deltas[k]*self.wo[j][k] hidden_deltas[j] = dsigmoid(self.ah[j]) * error for j in range(self.nh): for k in range(self.no): change = output_deltas[k]*self.ah[j] self.wo[j][k] = self.wo[j][k] + N*change + M*self.co[j][k] self.co[j][k] = change for i in range(self.ni): for j in range(self.nh): change = hidden_deltas[j]*self.ai[i] self.wi[i][j] = self.wi[i][j] + N*change + M*self.ci[i][j] self.ci[i][j] = change error = 0.0 for k in range(len(targets)): error = error + 0.5*(targets[k]-self.ao[k])**2 return error def test(self, patterns): for p in patterns: print(p[0], '->', self.update(p[0])) def weights(self): print('Input weights:') for i in range(self.ni): print(self.wi[i]) print() print('Output weights:') for j in range(self.nh): print(self.wo[j]) def train(self, patterns, iterations=2000, N=0.5, M=0.1): for i in range(iterations): error = 0.0 for p in patterns: inputs = p[0] targets = p[1] self.update(inputs) error = error + self.backPropagate(targets, N, M) if i % 100 == 0: print('error %-.5f' % error)
输出学习成果(自主学习运算结果)
def demo(): pat = [ [[0.5, 0.5], [1.0]], [[0.2, 0.3], [0.5]], [[1,0], [1]], [[0.1, 0.1], [0.2]], [[0.4, 0.5], [0.9]], [[0.6, 0.1], [0.7]] ] n = NN(2, 4, 1) n.train(pat) n.test(pat) n.test( [[[0.3, 0.4]]] ) n.test( [[[0.2, 0.7]]] ) if __name__ == '__main__': demo()
总程序
应用场景
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算