# Python:3层神经网络
# 初始代码源于:《Python神经网络编程》一书
# @Author: Hyde Kong
# -*- coding: UTF-8 -*-
import numpy
import scipy.special
# 神经网络类定义
class NeuralNetwork:
# 初始化神经网络
def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
# 设置每次输入层、隐藏层、输出层的节点数字
self.inodes = inputnodes
self.hnodes = hiddennodes
self.onodes = outputnodes
# 链接权重矩阵
# 矩阵内的权重设置为w_i_j,意思是从节点i链接到下一层节点j
# w11 w21
# w21 w22等
# 用下一层的节点数的开发作为标准方差来初始化权重
self.wih = numpy.random.normal(0.0, pow(self.hnodes, -0.5), (self.hnodes, self.inodes))
self.who = numpy.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes))
# 学习率
self.lr = learningrate
# 激活sgmoid抑制函数
self.activation_function = lambda x: scipy.special.expit(x)
pass
# 训练神经网络
def train(self,inputs_list,targets_list):
# 矩阵转置
inputs = numpy.array(inputs_list, ndmin=2).T
targets = numpy.array(targets_list,ndmin=2).T
# 计算隐藏层输入信号
hidden_inputs = numpy.dot(self.wih, inputs)
# 计算隐藏层输出信号
hidden_outputs = self.activation_function(hidden_inputs)
# 计算最终层输入信号
final_inputs = numpy.dot(self.who, hidden_outputs)
# 计算最终层输出信号
final_outputs = self.activation_function(final_inputs)
# 输出层误差=目标值-实际值
output_errors=targets-final_outputs
# 隐藏层误差=根据所连接的权重分割误差,为每个隐藏层节点重组这些误差
hidden_errors=numpy.dot(self.who.T, output_errors)
# 更新隐藏层和最终层之间的权重
self.who += self.lr * numpy.dot((output_errors*final_outputs * (1.0 - final_outputs)), numpy.transpose(hidden_outputs))
# 更新输入层和隐藏层之间的权重
self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)), numpy.transpose(inputs))
pass
# 查询神经网络
def query(self, inputs_list):
# 矩阵转置
inputs = numpy.array(inputs_list, ndmin=2).T
# 计算隐藏层输入信号
hidden_inputs = numpy.dot(self.wih, inputs)
# 计算隐藏层输出信号
hidden_outputs = self.activation_function(hidden_inputs)
# 计算最终层输入信号
final_inputs = numpy.dot(self.who, hidden_outputs)
# 计算最终层输出信号
final_outputs = self.activation_function(final_inputs)
return final_outputs
天飓
- 粉丝: 508
- 资源: 12
最新资源
- 《写给大众的健康饮食指南》.mp4
- 【安卓】最新v3.0植物大战僵尸杂交版-直装版本.mp4
- VsCode安装文档.zip
- 三菱FX3G FX3S 485协议通讯四台三菱E700变频器程序资料 三菱FX3G FX3S+485bd扩展,采用modbus rtu协议,crc校验,通讯控制四台E700变频器,可以实现正反转
- 【引流必备】外面收费688的网易小蜜蜂无限关注曝光打粉机,轻松日引流3000+【引流脚本】.mp4
- 【引流必备】全平台全功能引流软件大全,解放双手自动引流【永久脚本+使用教程】.mp4
- Modbus报文解析工具
- 12月最新付费进群系统.mp4
- 博文教程演示的文件与代码 参阅博文了解详细
- 2024TikTok变现实操课入局TikTok必学内容.mp4
- 基于旋转角轮廓点排序(python pycharm)
- 01-02-客达天下页面原型.zip
- 2024年末性价比服务器盘点,均为大厂,云服务器推荐.mp4
- 2024能落地的销售实战课销售系统该升级了.mp4
- 2024圣诞节倒计时页面源码.mp4
- 2024闲鱼陪跑辅助课教你整套闲鱼变现流程.mp4
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈