Python之简单的神经网络
from sklearn import datasets
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np def sigmoid(x):
# 激活函数 f(x) = 1 / (1 + e^(-x))
return 1 / (1 + np.exp(-x)) def deri_sigmoid(x):
# 激活函数求导 f'(x) = f(x) * (1 - f(x))
k = sigmoid(x)
return k * (1 - k) def mse_loss(y_true, y_pred):
return ((y_true - y_pred) ** 2).mean() class OurNeuralNetwork():
def __init__(self):
self.w1 = np.random.normal()
self.w2 = np.random.normal()
self.w3 = np.random.normal()
self.w4 = np.random.normal()
self.w5 = np.random.normal()
self.w6 = np.random.normal() self.b1 = np.random.normal()
self.b2 = np.random.normal()
self.b3 = np.random.normal() def feedforward(self, x):
h1 = sigmoid(x[0] * self.w1 + x[1] * self.w2 + self.b1)
h2 = sigmoid(x[0] * self.w3 + x[1] * self.w4 + self.b2)
o1 = sigmoid(h1 * self.w5 + h2 * self.w6 + self.b3)
return o1 def train(self, data, all_y_trues):
learn_rate = 0.1
times = 1000
for time in range(times):
for x, y_true in zip(data, all_y_trues):
sum_h1 = x[0] * self.w1 + x[1] * self.w2 + self.b1
h1 = sigmoid(sum_h1)
sum_h2 = x[0] * self.w3 + x[1] * self.w4 + self.b2
h2 = sigmoid(sum_h2)
sum_o1 = h1 * self.w5 + h2 * self.w6 + self.b3
o1 = sigmoid(sum_o1)
y_pred = o1 dL_dypred = -2 * (y_true - y_pred) # 第一个导数 dL/dypred
dypred_dw5 = deri_sigmoid(sum_o1) * h1
dypred_dw6 = deri_sigmoid(sum_o1) * h2
dypred_db3 = deri_sigmoid(sum_o1) dypred_dh1 = deri_sigmoid(sum_o1) * self.w5
dypred_dh2 = deri_sigmoid(sum_o1) * self.w6 dh1_dw1 = deri_sigmoid(sum_h1) * x[0]
dh1_dw2 = deri_sigmoid(sum_h1) * x[1]
dh1_db1 = deri_sigmoid(sum_h1) dh2_dw3 = deri_sigmoid(sum_h2) * x[0]
dh2_dw4 = deri_sigmoid(sum_h2) * x[1]
dh2_db2 = deri_sigmoid(sum_h2) # 更新权重 w1 -= learn_rate * dL_dw1, dL_dw1 = dL/dypred * dypred/dh1 * dh1/dw1
self.w5 -= learn_rate * dL_dypred * dypred_dw5
self.w6 -= learn_rate * dL_dypred * dypred_dw6
self.w3 -= learn_rate * dL_dypred * dypred_db3 self.w3 -= learn_rate * dL_dypred * dypred_dh2 * dh2_dw3
self.w4 -= learn_rate * dL_dypred * dypred_dh2 * dh2_dw4
self.b2 -= learn_rate * dL_dypred * dypred_dh2 * dh2_db2 self.w1 -= learn_rate * dL_dypred * dypred_dh1 * dh1_dw1
self.w2 -= learn_rate * dL_dypred * dypred_dh1 * dh1_dw2
self.b1 -= learn_rate * dL_dypred * dypred_dh1 * dh1_db1 if time % 10 == 0:
y_preds = np.apply_along_axis(self.feedforward, 1, data)
loss = mse_loss(all_y_trues, y_preds)
print("time %d loss: %0.3f" % (time, loss)) # Define dataset
data = np.array([
[-2, -1], # Alice
[25, 6], # Bob
[17, 4], # Charlie
[-15, -6] # diana
])
all_y_trues = np.array([
1, # Alice
0, # Bob
0, # Charlie
1 # diana
]) # Train our neural network!
network = OurNeuralNetwork()
network.train(data, all_y_trues)
Python之简单的神经网络的更多相关文章
- Python实现一个简单三层神经网络的搭建并测试
python实现一个简单三层神经网络的搭建(有代码) 废话不多说了,直接步入正题,一个完整的神经网络一般由三层构成:输入层,隐藏层(可以有多层)和输出层.本文所构建的神经网络隐藏层只有一层.一个神经网 ...
- 一个 11 行 Python 代码实现的神经网络
一个 11 行 Python 代码实现的神经网络 2015/12/02 · 实践项目 · 15 评论· 神经网络 分享到:18 本文由 伯乐在线 - 耶鲁怕冷 翻译,Namco 校稿.未经许可,禁止转 ...
- python手写bp神经网络实现人脸性别识别1.0
写在前面:本实验用到的图片均来自google图片,侵删! 实验介绍 用python手写一个简单bp神经网络,实现人脸的性别识别.由于本人的机器配置比较差,所以无法使用网上很红的人脸大数据数据集(如lf ...
- Python语言编写BP神经网络
Python语言编写BP神经网络 2016年10月31日 16:42:44 ldy944758217 阅读数 3135 人工神经网络是一种经典的机器学习模型,随着深度学习的发展神经网络模型日益完善 ...
- 用Python从头开始构建神经网络
神经网络已经被开发用来模拟人脑.虽然我们还没有做到这一点,但神经网络在机器学习方面是非常有效的.它在上世纪80年代和90年代很流行,最近越来越流行.计算机的速度足以在合理的时间内运行一个大型神经网络. ...
- Python 实现简单的 Web
简单的学了下Python, 然后用Python实现简单的Web. 因为正在学习计算机网络,所以通过编程来加强自己对于Http协议和Web服务器的理解,也理解下如何实现Web服务请求.响应.错误处理以及 ...
- tensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试
刚开始学习tf时,我们从简单的地方开始.卷积神经网络(CNN)是由简单的神经网络(NN)发展而来的,因此,我们的第一个例子,就从神经网络开始. 神经网络没有卷积功能,只有简单的三层:输入层,隐藏层和输 ...
- 用 python实现简单EXCEL数据统计
任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlrd workbook = xlrd.open_ ...
- python开启简单webserver
python开启简单webserver linux下面使用 python -m SimpleHTTPServer 8000 windows下面使用上面的命令会报错,Python.Exe: No Mod ...
随机推荐
- php加密压缩文件
前言 近几日,用爬虫采集的了一些数据,存放到硬盘中,随着数据量越来越多,所以想上传到网盘当中,可是不加下密又觉得不放心, 所以开始用PHP的zip模块进行压缩加密. 开始 $zipArc = new ...
- XCTF Guess-the-Number
一.发现是jar文件,一定想到反汇编gdui这个工具,而且运行不起来,可能是我电脑问题,我就直接反编译出来了. 也发现了flag,和对应的算法,直接拉出来,在本地运行,后得到flag 二.java代码
- nmon工具安装及nmon analyser的使用
步骤一:下载nmon及nmon analyser工具 nmon:http://nmon.sourceforge.net/pmwiki.php 根据自己系统的版本下载相应的版本即可 nmon analy ...
- HAL库直流电机编码测速(L298N驱动)笔记
主函数开始后的处理流程: 1.外设初始化:HAL_Init() 2.系统时钟配置 RCC振荡器初始化:HAL_RCC_OsConfig() RCC时钟初始化:HAL_RCC_ClockConfig() ...
- C语言:常量写法
float a=7.5f; //7.5为浮点数 long b=100L; //100为长整数 int c=0123;// 0123为8进制数 int d=0x123;//0x123为16进制数
- C语言:FILE p和FILE *p
FILE p和FILE *p大概可以这么理解:1 . 前一个p指文件型变量,后一个p指文件地址型变量.2 . 前一个p的内存地址已定,后一个p内存地址未定. 前一个是声明类对象,后一个是声明一个可指向 ...
- PYTHON 当前.PY文件名不能与引入的模块同名
当前文件名:sqlite3.py 文件引入import sqlite3 运行会出错,因为调用sqlite3的方法首先从当前文件找方法,当然找不到,所以会报错了
- 微信小程序云开发-云存储-上传单张照片到云存储并显示到页面上
一.wxml文件 页面上写上传图片的按钮,按钮绑定chooseImg. <button bindtap="chooseImg" type="primary" ...
- transform和tolower
transform:<algorithm> tolower:<ctype.h> transform有两种使用方法 第一种(参数): 源目标起始迭代器地址 源目标结束迭代器地址 ...
- 第十八篇 -- QTreeWidget应用篇 -- kuwo
效果图: 最近学习QTreeWidget,总想着做些什么,正好学习过一点简单的爬虫,就做了一个简易的"酷我音乐下载器",界面可能不太好看,以后继续优化. ui_kuwo.py # ...