神经网络对比

简介: 1. 只能分两类 层数固定不变层数可以变化 ''' 11行神经网络① 固定三层,两类 ''' # 只适合 0, 1 两类。若不是,要先转化 import numpy as np X = np.

 

1. 只能分两类

层数固定不变 层数可以变化
''' 
11行神经网络①  
固定三层,两类
'''
# 只适合 0, 1 两类。若不是,要先转化
import numpy as np

X = np.array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]])
y = np.array([0,1,1,0]).reshape(-1,1) # 此处reshape是为了便于算法简洁实现

wi = 2*np.random.randn(3,5) - 1
wh = 2*np.random.randn(5,1) - 1

for j in range(10000):
    li = X
    lh = 1/(1+np.exp(-(np.dot(li,wi))))
    lo = 1/(1+np.exp(-(np.dot(lh,wh))))
    
    lo_delta = (y - lo)*(lo*(1-lo))
    lh_delta = np.dot(lo_delta, wh.T) * (lh * (1-lh))
    
    wh += np.dot(lh.T, lo_delta)
    wi += np.dot(li.T, lh_delta)
    
print('训练结果:', lo)
'''
11行神经网络① 
层数可变,两类
'''
# 只适合 0, 1 两类。若不是,要先转化
import numpy as np

X = np.array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]])
y = np.array([0,1,1,0]).reshape(-1,1) # 此处reshape是为了便于算法简洁实现

neurals = [3,15,1]
w
= [np.random.randn(i,j) for i,j in zip(neurals[:-1], neurals[1:])] + [None] l = [None] * len(neurals) l_delta = [None] * len(neurals) for j in range(1000): l[0] = X for i in range(1, len(neurals)): l[i] = 1 / (1 + np.exp(-(np.dot(l[i-1], w[i-1])))) l_delta[-1] = (y - l[-1]) * (l[-1] * (1 - l[-1])) for i in range(len(neurals)-2, 0, -1): l_delta[i] = np.dot(l_delta[i+1], w[i].T) * (l[i] * (1 - l[i])) for i in range(len(neurals)-2, -1, -1): w[i] += np.dot(l[i].T, l_delta[i+1]) print('训练结果:', l[-1])

 

 

2.可以分多类

层数固定不变 层数可以变化
'''
11行神经网络① 
固定三层,多类
'''
import numpy as np

X = np.array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]])
#y = np.array([0,1,1,0]) # 可以两类
y = np.array([0,1,2,3])  # 可以多类

wi = np.random.randn(3,5)
wh = np.random.randn(5,4) #
bh = np.random.randn(1,5)
bo = np.random.randn(1,4) #

epsilon = 0.01    # 学习速率
lamda = 0.01      # 正则化强度

for j in range(1000):
    li = X
    lh = np.tanh(np.dot(li, wi) + bh)     # tanh 函数
    lo = np.exp(np.dot(lh, wh) + bo)
    probs = lo / np.sum(lo, axis=1, keepdims=True)

    # 后向传播
    lo_delta = np.copy(probs)
    lo_delta[range(X.shape[0]), y] -= 1
    lh_delta = np.dot(lo_delta, wh.T) * (1 - np.power(lh, 2)) 

    # 更新权值、偏置
    wh -= epsilon * (np.dot(lh.T, lo_delta) + lamda * wh)
    wi -= epsilon * (np.dot(li.T, lh_delta) + lamda * wi)
    
    bo -= epsilon * np.sum(lo_delta, axis=0, keepdims=True)
    bh -= epsilon * np.sum(lh_delta, axis=0)
    
print('训练结果:', np.argmax(probs, axis=1))

 

'''
11行神经网络① 
层数可变,多类
'''
import numpy as np

X = np.array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]])
#y = np.array([0,1,1,0]) # 可以两类
y = np.array([0,1,2,3])  # 可以多类

neurals = [3, 10, 8, 4]
w
= [np.random.randn(i,j) for i,j in zip(neurals[:-1], neurals[1:])] + [None] b = [None] + [np.random.randn(1,j) for j in neurals[1:]] l = [None] * len(neurals) l_delta = [None] * len(neurals) epsilon = 0.01 # 学习速率 lamda = 0.01 # 正则化强度 for j in range(1000): # 前向传播 l[0] = X for i in range(1, len(neurals)-1): l[i] = np.tanh(np.dot(l[i-1], w[i-1]) + b[i]) # tanh 函数 l[-1] = np.exp(np.dot(l[-2], w[-2]) + b[-1]) probs = l[-1] / np.sum(l[-1], axis=1, keepdims=True) # 后向传播 l_delta[-1] = np.copy(probs) l_delta[-1][range(X.shape[0]), y] -= 1 for i in range(len(neurals)-2, 0, -1): l_delta[i] = np.dot(l_delta[i+1], w[i].T) * (1 - np.power(l[i], 2)) # tanh 函数的导数 # 更新权值、偏置 b[-1] -= epsilon * np.sum(l_delta[-1], axis=0, keepdims=True) for i in range(len(neurals)-2, -1, -1): w[i] -= epsilon * (np.dot(l[i].T, l_delta[i+1]) + lamda * w[i]) if i == 0: break b[i] -= epsilon * np.sum(l_delta[i], axis=0) # 打印损失 if j % 100 == 0: loss = np.sum(-np.log(probs[range(X.shape[0]), y])) loss += lamda/2 * np.sum([np.sum(np.square(wi)) for wi in w[:-1]]) # 可选 loss *= 1/X.shape[0] # 可选 print('loss:', loss) print('训练结果:', np.argmax(probs, axis=1))

 

 

目录
相关文章
|
编解码 算法 搜索推荐
淘宝人生里的虚拟人像渲染技术
全程干货,淘宝人生里的虚拟人像是如何实现的?
淘宝人生里的虚拟人像渲染技术
|
存储 SQL 数据库连接
MPPDB分布式结构化数据库
1.MPPDB简介 MPP,它是一款 Shared Nothing 架构的分布式并行数据库集群,具备高性能、高可用、高扩展特性,可以为超大规模数据管理提供高性价比的通用计算平台,并广泛地用于支撑各类数据仓库系统、BI 系统和决策支持系统。
7121 0
|
10月前
|
存储 数据采集 数据格式
Python自动化Office文档处理全攻略
本文介绍如何使用Python自动化处理Word、Excel和PDF文档,提升办公效率。通过安装`python-docx`、`openpyxl`、`pandas`、`PyPDF2`和`pdfplumber`等库,可以轻松实现读取、修改、创建和批量处理这些文档。具体包括:自动化处理Word文档(如读取、修改内容、调整样式),Excel文档(如读取、清洗、汇总数据),以及PDF文档(如提取文本和表格数据)。结合代码示例和实战案例,帮助你掌握高效办公技巧,减少手动操作的错误率。
633 1
|
8月前
|
监控 前端开发 小程序
陪练,代练,护航,代打小程序源码/前端UNIAPP-VUE2.0开发 后端Thinkphp6管理/具备家政服务的综合型平台
这款APP通过技术创新,将代练、家政、娱乐社交等场景融合,打造“全能型生活服务生态圈”。以代练为切入点,提供模块化代码支持快速搭建平台,结合智能匹配与技能审核机制,拓展家政服务和商业管理功能。技术架构具备高安全性和扩展性,支持多业务复用,如押金冻结、录屏监控等功能跨领域应用。商业模式多元,包括交易抽成、增值服务及广告联名,同时设计跨领域积分体系提升用户粘性,实现生态共生与B端赋能。
769 12
|
存储 前端开发 JavaScript
深入理解React Fiber架构及其性能优化
【10月更文挑战第5天】深入理解React Fiber架构及其性能优化
521 1
|
11月前
|
人工智能 自然语言处理 安全
《方舟编译器——开启人工智能编译优化新篇章》
鸿蒙系统的方舟编译器在人工智能领域展现出显著优势,通过多语言联合编译优化、静态编译提升效率和硬件适配指令集优化,大幅加快模型训练速度。在应用方面,它支持分布式协同、优化内存管理和增强安全性能,保障数据隐私。这些特性不仅提升了AI模型的训练和应用效率,还推动了人工智能技术的广泛应用和发展。
497 14
|
12月前
|
存储 人工智能 项目管理
提升企业竞争力的关键:探索多人协同办公的优势与挑战
本文介绍了多人协同办公的背景、工具及优势。随着全球化和技术的发展,远程办公和跨区域协作成为趋势,企业依赖云计算、大数据等技术实现高效团队协作。文章详细介绍了云协作平台、即时通讯工具、项目管理工具和文件共享工具,并探讨了多人协同办公在提升工作效率、跨地域协作、促进创新和增强团队透明度等方面的优势。最后,展望了未来多人协同办公的创新方向,包括人工智能、虚拟现实和工具深度集成等。
|
Web App开发 编解码 监控
直播协议
【10月更文挑战第26天】不同的直播协议具有不同的特点和应用场景。在选择直播协议时,需要根据直播的需求、目标受众、网络环境等因素进行综合考虑,以选择最适合的直播协议,确保直播的流畅性、稳定性和高质量。
|
Java 开发者
Java IO流实战技巧:如何优化InputStream/OutputStream和Reader/Writer的使用?
【6月更文挑战第26天】Java IO流优化涉及缓冲、资源管理、字符编码和流式处理。使用Buffered流提高读写效率,如`BufferedInputStream`和`BufferedReader`。确保资源关闭使用try-with-resources,如`try (InputStream is = ...) {...}`。处理文本时指定编码,如`InputStreamReader(is, StandardCharsets.UTF_8)`防止乱码。流式处理大文件,分块读写避免内存溢出,以减少内存占用。这些技巧能提升程序性能和健壮性。
619 0
|
Ubuntu 应用服务中间件 nginx
docker--导出镜像 save/export、导入镜像 load/import
docker--导出镜像 save/export、导入镜像 load/import
19979 1