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. Docker:docker搭建redis一主多从集群(配置哨兵模式)

    角色 实例IP 实例端口 宿主机IP 宿主机端口 master 172.19.0.2 6382 192.168.1.200 6382 slave01 172.19.0.3 6383 192.168.1 ...

  2. 2020年MySQL数据库面试题总结(50道题含答案解析)

    1.MySQL 中有哪几种锁? (1)表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最 高,并发度最低. (2)行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最 ...

  3. EF Core3.1 CodeFirst动态自动添加表和字段的描述信息

    前言 我又来啦.. 本篇主要记录如何针对CodeFirst做自动添加描述的扩展 为什么要用这个呢.. 因为EF Core3.1 CodeFirst 对于自动添加描述这块 只有少部分的数据库支持.. 然 ...

  4. java基础---泛型机制

    从java5 开始增加泛型机制,用于明确集合中可以放入的元素类型,只在编译时期有效,运行时不区分是什么类型. 格式:<数据类型> 泛型的本质是参数化类型,让数据类型作为参数传递,E相当于形 ...

  5. js浮点数保留位数方法封装

    大家在平时业务中应该经常跟小数打交道吧,有没有被小数点的保留位数问题搞得头疼啊.比如,保留一位小数,保留俩位小数,保留三位小数,向上取整.四舍五入等等. 而我最近在项目中正好遇到类似的问题:有的地方要 ...

  6. python之数据驱动ddt操作(方法三)

    import unittestfrom selenium import webdriverfrom selenium.webdriver.common.by import Byimport unitt ...

  7. Linux系统下Java 转换Word到PDF时,结果文档内容乱码的解决方法

    本文分享在Linux系统下,通过Java 程序代码将Word转为PDF文档时,结果文档内容出现乱码该如何解决.具体可参考如下内容: 1.问题出现的背景 在Windows系统中,使用Spire.Doc ...

  8. 使用ThinkPHP5.0.12连接Mongo数据库的经验

    本地开发环境xamppv3.2.2,ThinkPHP5.0.12版本. 由于之前开发项目时使用的是TP3.2.3+mongo数据库,也是在本地进行的,所以也进行过mongo数据库驱动的配置.详细方法可 ...

  9. odoo里的开发案例

    1.模块命名[驼峰命名方法] res开头的是:resources   常见模型:res.users,   res.company,    res.partner,   res.config.setti ...

  10. 如何让py生成pyd

    pyd文件类似于C++中的dll,可以编译,但是看不到源代码. py转换成pyd参考链接:https://blog.csdn.net/weixin_44493841/article/details/1 ...