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之简单的神经网络的更多相关文章

  1. Python实现一个简单三层神经网络的搭建并测试

    python实现一个简单三层神经网络的搭建(有代码) 废话不多说了,直接步入正题,一个完整的神经网络一般由三层构成:输入层,隐藏层(可以有多层)和输出层.本文所构建的神经网络隐藏层只有一层.一个神经网 ...

  2. 一个 11 行 Python 代码实现的神经网络

    一个 11 行 Python 代码实现的神经网络 2015/12/02 · 实践项目 · 15 评论· 神经网络 分享到:18 本文由 伯乐在线 - 耶鲁怕冷 翻译,Namco 校稿.未经许可,禁止转 ...

  3. python手写bp神经网络实现人脸性别识别1.0

    写在前面:本实验用到的图片均来自google图片,侵删! 实验介绍 用python手写一个简单bp神经网络,实现人脸的性别识别.由于本人的机器配置比较差,所以无法使用网上很红的人脸大数据数据集(如lf ...

  4. Python语言编写BP神经网络

    Python语言编写BP神经网络 2016年10月31日 16:42:44 ldy944758217 阅读数 3135   人工神经网络是一种经典的机器学习模型,随着深度学习的发展神经网络模型日益完善 ...

  5. 用Python从头开始构建神经网络

    神经网络已经被开发用来模拟人脑.虽然我们还没有做到这一点,但神经网络在机器学习方面是非常有效的.它在上世纪80年代和90年代很流行,最近越来越流行.计算机的速度足以在合理的时间内运行一个大型神经网络. ...

  6. Python 实现简单的 Web

    简单的学了下Python, 然后用Python实现简单的Web. 因为正在学习计算机网络,所以通过编程来加强自己对于Http协议和Web服务器的理解,也理解下如何实现Web服务请求.响应.错误处理以及 ...

  7. tensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试

    刚开始学习tf时,我们从简单的地方开始.卷积神经网络(CNN)是由简单的神经网络(NN)发展而来的,因此,我们的第一个例子,就从神经网络开始. 神经网络没有卷积功能,只有简单的三层:输入层,隐藏层和输 ...

  8. 用 python实现简单EXCEL数据统计

    任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlrd workbook = xlrd.open_ ...

  9. python开启简单webserver

    python开启简单webserver linux下面使用 python -m SimpleHTTPServer 8000 windows下面使用上面的命令会报错,Python.Exe: No Mod ...

随机推荐

  1. linux修改 ls 命令的时间显示格式

    一直不习惯 ll 命令将时间日期格式显示为 周名和月名,想要纯粹的 数字格式,找了好久,终于想到一个办法--alias. [root@localhost ~]# alias #显示当前已存在的alia ...

  2. SpringMVC(3)URL请求到Action的映射规则

    在SpringMVC(2)经典的HelloWorld实现我们展示了一个简单的get请求,并返回了一个简单的helloworld页面.本篇我们来学习如何来配置一个action的url映射规则. 在Spr ...

  3. ctf之SusCTF2017-Crack Zip

    题目信息如下,可知为杂项题,且无提示 下载文件打开如图,该压缩包是加密的 首先想到的是暴力破解,下载zip暴力破解软件打开文件. 下一步,选择暴力破解 进行暴力破解设定,进行破解 破解完成,得到密解压 ...

  4. 「CF527E」 Data Center Drama

    「CF527E」 Data Center Drama 传送门 显然一个环肯定满足题目条件. 然后我就开始想:先整一棵 \(\texttt{DFS}\) 树,然后非树边从深度深的节点向深度浅的节点连边, ...

  5. YAOI Round #3 题解

    前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/7 Div.2 : http://47.110.12.131:9016/contest/8 Div ...

  6. 4.Java基础

    为了项目方便管理,创建空项目 一.注释 平时编写代码,在代码量比较少的时候,还可以看懂自己写的,但是当项目结构一复杂起来,我们就需要用到注释了 注释并不会被执行,是给写代码的人看的 书写注释是一个非常 ...

  7. [001] - JavaSE面试题(一):面向对象

    第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [001] - JavaSE面试题(一):面向对象 第1问:面向对象和面向过程的区别? 面向过程 ...

  8. Kubernetes部署-RKE自动化部署

    一.简介 RKE:Rancher Kubernetes Engine 一个极其简单,闪电般快速的Kubernetes安装程序,可在任何地方使用. 二.准备工作 I.配置系统 系统:CentOS 7 / ...

  9. Pytorch系列:(七)模型初始化

    为什么要进行初始化 首先假设有一个两层全连接网络,第一层的第一个节点值为 \(H_{11}= \sum_{i=0}^n X_i*W_{1i}\), 这个时候,方差为 \(D(H_{11}) = \su ...

  10. IDEA搭建springmvc环境之后无故出现404

    其实这应该是IDEA的自身问题 打开项目结构