神经网络对比

 

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))

 

 

<think>嗯,用户想要比较不同神经网络架构的特点和性能,并且提到了需要神经网络架构对比图的解决方案。首先,我需要明确用户的需求是什么。可能他们是在做研究或者项目,需要选择适合的神经网络模型,所以需要了解各种架构的优缺点和应用场景。 接下来,我应该考虑如何组织这些信息。用户可能需要一个清晰的对比表格,涵盖常见的神经网络类型,比如前馈神经网络、卷积神经网络、循环神经网络、图神经网络、生成对抗网络和Transformer。每个架构的结构特点、核心优势、典型应用、性能指标和缺点都需要列出来,这样用户一目了然。 然后,我得参考提供的引用内容。引用[3]详细介绍了前馈型BP网络,包括它的优缺点,比如处理非线性映射的能力,但存在收敛速度慢和局部极值的问题。引用[1]和[2]讨论了图神经网络(GNN),特别是它们在处理图结构数据时的应用以及训练上的挑战,比如现有框架的局限性。这些信息需要整合到对比中,突出GNN在社交网络分析等领域的优势,以及训练效率的问题。 用户可能还想知道如何生成架构对比图。解决方案部分需要分步骤说明,比如确定对比维度、选择代表性架构、收集数据、使用工具制作图表(比如PowerPoint、TensorBoard、Draw.io),最后进行分析。这部分要具体,让用户知道每一步该怎么做。 另外,用户的问题可能涉及性能分析,比如训练时间、准确率这些指标,所以对比表中需要包括这些内容。同时,应用场景的对比能帮助用户根据具体任务选择合适的模型。 还要注意用户提到的解决方案需要结构清晰,分步骤进行。可能需要建议他们使用哪些工具来制作图表,例如Draw.io适合流程图,TensorBoard适合可视化训练过程,这样用户可以根据自己的需求选择工具。 最后,确保回答符合系统级指令:使用正确的中文,数学公式用$...$,独立公式用$$...$$,生成相关问题,引用正确。检查是否有遗漏的架构,或者是否有最新的模型需要考虑,但根据提供的引用,主要围绕前馈、卷积、循环、图神经网络等即可。 总结来说,回答需要先对比各种架构,然后给出生成对比图的步骤,最后提出相关问题,帮助用户进一步探索。确保引用标记正确,例如引用[1]、[2]、[3]的位置是否恰当,是否在相关部分末尾自然添加。</think>### 神经网络架构对比分析 #### 1. 常见神经网络架构对比表 | 架构类型 | 结构特点 | 核心优势 | 典型应用场景 | 性能指标(示例) | 主要缺点 | |--------------------|-----------------------------------|--------------------------------------------|-----------------------|-----------------------|---------------------------| | 前馈神经网络(BP) | 单向层间全连接 | 实现任意非线性映射[^3] | 简单分类/回归 | 准确率$85\%$, 训练时间$t=10$min | 易陷入局部极值,收敛慢[^3] | | 卷积神经网络(CNN) | 局部连接+权重共享 | 高效提取空间特征 | 图像识别 | 准确率$98\%$, 参数量$10^6$ | 处理序列数据能力弱 | | 循环神经网络(RNN) | 时间维度递归结构 | 捕捉时序依赖关系 | 自然语言处理 | BLEU值$0.65$, 梯度消失概率$p=0.3$ | 长期依赖处理困难 | | 图神经网络(GNN) | 图结构传播+邻居聚合[^2] | 处理非欧式空间数据 | 社交网络分析[^1] | 节点分类F1$0.92$, 训练效率$O(n^2)$ | 大规模训练困难[^2] | | 生成对抗网络(GAN) | 生成器+判别器对抗训练 | 生成高质量合成数据 | 图像生成 | IS得分$8.5$, 模式崩溃频率$15\%$ | 训练稳定性差 | | Transformer | 自注意力机制+位置编码 | 并行处理长距离依赖 | 机器翻译 | BLEU-4$0.41$, 内存占用$12$GB | 计算复杂度$O(n^2)$ | $$ \text{注:性能指标} = f(\text{数据规模}, \text{硬件配置}, \text{超参数调优}) $$ #### 2. 架构对比图生成方案 **步骤1:确定对比维度** - 选择结构特征(网络深度、连接方式等) - 量化性能指标(准确率、训练时间、内存占用等) **步骤2:选择代表性架构** - 基础模型:前馈网络、CNN、RNN - 新兴模型:GNN[^2]、Transformer **步骤3:数据收集与可视化** - 使用工具生成对比图: ```python import matplotlib.pyplot as plt architectures = ['BP', 'CNN', 'GNN'] accuracy = [0.85, 0.98, 0.92] plt.bar(architectures, accuracy) # 生成柱状对比图 ``` **步骤4:工具推荐** - PowerPoint:快速绘制示意图 - TensorBoard:动态性能对比 - Draw.io:生成结构流程图 #### 3. 关键性能对比维度 1. **计算效率** - CNN的局部连接 vs GNN的邻居聚合[^2] $$ \text{FLOPs}_{\text{CNN}} = O(k^2 \cdot C_{\text{in}} \cdot C_{\text{out}} \cdot H \cdot W) $$ 2. **特征提取能力** - Transformer的自注意力机制可建模全局关系 - GNN的图传播适合社交网络分析 3. **训练稳定性** - BP网络易陷局部最优[^3] - GAN存在模式崩溃风险
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值