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 ...
随机推荐
- 学会这些CSS技巧让你写样式更加丝滑
目录 1,前言 1,calc() 2,min() 3,max() 4,clamp() 5,gap 6,writing-mode 1,前言 记录一些很好用的css属性 1,calc() calc()函数 ...
- Java实验项目三——简单工厂模式
Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽 ...
- STM32笔记一
1.脉冲宽度调制是(PWM):用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量.通信到功率控制与变换的许多领域中.一般用于直流电机调速. 2.外部中断:外部中断是单片机实 ...
- 由ctf来看java报错的危害
很多java报错在我们渗透的时候经常会被发现,但由于没什么用,危害比较低被忽略,开发也很不愿意修改. 但从纵深防御的角度来说,多个小问题的结合就会产生严重的问题.此次遇到的一个ctf题就是一个例子. ...
- asp.net 网页图片URL
"upload/"+Eval("kemu")+"/"+Eval("tx")+".jpg" " ...
- CF1330B题解
题意: 给定一个长为 \(n\) 序列 \(a\) ,问是否能分成两个排列,并输出方案 (排列:从 \(1-n\) 中选取不同的 \(n\) 个元素组成的序列) 思路: 观察数据范围可以猜出,这题 \ ...
- Spring RestTemplate 之get请求
一,简介:Spring RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写 ...
- win 10,Maven 配置
来源:https://www.cnblogs.com/lihan829/p/11503497.html 所需工具 : JDK 1.8 Maven 3.6.2 Windows 10 注Maven 3.2 ...
- 流畅的python-2
一.python数据结构 ----------------> () [] {} List 列表[] 可变的 lst = [1,2,3,4] #改 lst[(元素下标 ...
- js 时间戳转为日期
1 function time(){ //页面时间戳转换成时间 2 $(".time").each(function(){ 3 var time = $(this).text(); ...