版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验1神经网络基础——感知机、激活函数与反向传播一、实验目的及要求理解人工神经元的数学模型,掌握加权求和、偏置与激活函数的作用。通过实现逻辑门感知机,理解单层感知机的能力与局限(如无法解决XOR问题)。可视化Sigmoid、Tanh、ReLU等常见激活函数,比较其特点与适用场景。动手实现一个包含一个隐藏层的简单神经网络的前向传播与反向传播,理解梯度下降参数更新过程。培养从“规则驱动”到“数据驱动”的范式转变意识。二、实验学时2学时(建议时间分配:讲解10分钟,任务实践70分钟,总结报告10分钟)三、实验前准备软件环境:Python3.8及以上,建议使用JupyterNotebook或VSCode。依赖库:NumPy、Matplotlib。安装命令如下:pipinstallnumpymatplotlib知识储备:已学习教材第5.1、5.2、5.3节内容,了解神经元、激活函数、前向传播与反向传播的基本概念。在JupyterNotebook中运行绘图代码前,建议先执行`%matplotlibinline`,以保证图像正常显示。四、实验任务任务1感知机实现逻辑门(15分钟)使用NumPy实现一个不带激活函数(或带阶跃函数)的感知机,手动设置权重,验证其能否正确实现AND、OR门。任务2单层感知机的局限——XOR问题(10分钟)将XOR真值表输入任务1中的感知机,观察输出结果,解释为什么单层感知机无法解决XOR问题。任务3激活函数可视化(15分钟)绘制Sigmoid、Tanh、ReLU三种激活函数的图像,观察其取值范围、单调性、在原点附近的梯度特性。任务4手动实现两层神经网络求解XOR(25分钟)使用NumPy手动实现一个输入层(2个神经元)+隐藏层(4个神经元,Sigmoid)+输出层(1个神经元,Sigmoid)的神经网络,通过反向传播训练其学会XOR函数。任务5对比scikit-learnMLP(5分钟)使用sklearn.neural_network.MLPClassifier快速求解XOR,体会使用框架的便利性。参考代码以下为完整可运行代码:#实验六:神经网络基础——感知机、激活函数与反向传播
importnumpyasnp
importmatplotlib.pyplotasplt
#设置中文字体
plt.rcParams['font.sans-serif']=['SimHei','MicrosoftYaHei','ArialUnicodeMS']
plt.rcParams['axes.unicode_minus']=False
#====================任务1:感知机实现逻辑门====================
defstep(x):
returnnp.where(x>=0,1,0)
defperceptron(x,w,b):
returnstep(np.dot(x,w)+b)
#训练数据:AND与OR
X=np.array([[0,0],[0,1],[1,0],[1,1]])
#AND门:w1=1,w2=1,b=-1.5
w_and=np.array([1.0,1.0])
b_and=-1.5
print("AND门输出:",perceptron(X,w_and,b_and))
#OR门:w1=1,w2=1,b=-0.5
w_or=np.array([1.0,1.0])
b_or=-0.5
print("OR门输出:",perceptron(X,w_or,b_or))
#====================任务2:单层感知机无法解决XOR====================
y_xor=np.array([0,1,1,0])
print("\nXOR目标:",y_xor)
print("使用AND权重预测XOR:",perceptron(X,w_and,b_and))
print("结论:单层感知机无法用一条直线分开XOR的两类样本。")
#====================任务3:激活函数可视化====================
x=np.linspace(-6,6,400)
plt.figure(figsize=(10,4))
plt.subplot(1,3,1)
plt.plot(x,1/(1+np.exp(-x)))
plt.title("Sigmoid")
plt.grid(True)
plt.subplot(1,3,2)
plt.plot(x,np.tanh(x))
plt.title("Tanh")
plt.grid(True)
plt.subplot(1,3,3)
plt.plot(x,np.maximum(0,x))
plt.title("ReLU")
plt.grid(True)
plt.tight_layout()
plt.show()
#====================任务4:手动实现两层神经网络求解XOR====================
np.random.seed(42)
#网络结构:2->4->1
input_size=2
hidden_size=4
output_size=1
learning_rate=0.5
epochs=10000
#初始化权重与偏置
W1=np.random.randn(input_size,hidden_size)
b1=np.zeros((1,hidden_size))
W2=np.random.randn(hidden_size,output_size)
b2=np.zeros((1,output_size))
defsigmoid(x):
return1/(1+np.exp(-x))
defsigmoid_derivative(x):
returnx*(1-x)
loss_history=[]
forepochinrange(epochs):
#前向传播
z1=np.dot(X,W1)+b1
a1=sigmoid(z1)
z2=np.dot(a1,W2)+b2
a2=sigmoid(z2)
#计算损失(均方误差)
loss=np.mean((y_xor.reshape(-1,1)-a2)**2)
loss_history.append(loss)
#反向传播
d_a2=-(y_xor.reshape(-1,1)-a2)
d_z2=d_a2*sigmoid_derivative(a2)
d_W2=np.dot(a1.T,d_z2)/len(X)
d_b2=np.mean(d_z2,axis=0,keepdims=True)
d_a1=np.dot(d_z2,W2.T)
d_z1=d_a1*sigmoid_derivative(a1)
d_W1=np.dot(X.T,d_z1)/len(X)
d_b1=np.mean(d_z1,axis=0,keepdims=True)
#参数更新(梯度下降)
W2-=learning_rate*d_W2
b2-=learning_rate*d_b2
W1-=learning_rate*d_W1
b1-=learning_rate*d_b1
if(epoch+1)%1000==0:
print(f"Epoch{epoch+1},Loss:{loss:.6f}")
print("\nXOR预测结果:")
print(np.round(a2,3))
plt.figure(figsize=(6,4))
plt.plot(loss_history)
plt.xlabel("迭代次数")
plt.ylabel("损失")
plt.title("训练损失曲线")
plt.grid(True)
plt.show()
#====================任务5:使用scikit-learnMLP求解XOR====================
fromsklearn.neural_networkimportMLPClassifier
mlp=MLPClassifier(hidden_layer_sizes=(4,),activation='tanh',
solver='lbfgs',max_iter=1000,random_state=42)
mlp.fit(X,y_xor)
print("\nMLPClassifierXOR预测:",mlp.predict(X))
预期结果(参考)AND门输出:[0001]
OR门输出:[0111]
XOR目标:[0110]
使用AND权重预测XOR:[0001]
结论:单层感知机无法用一条直线分开XOR的两类样本。
Epoch1000,Loss:0.241226
Epoch2000,Loss:0.183268
Epoch3000,Loss:0.076462
Epoch4000,Loss:0.020962
Epoch5000,Loss:0.009372
Epoch6000,Loss:0.005534
Epoch7000,Loss:0.003767
Epoch8000,Loss:0.002788
Epoch9000,Loss:0.002179
Epoch10000,Loss:0.001770
XOR预测结果:
[[0.03]
[0.96]
[0.956]
[0.051]]
MLPClassifierXOR预测:[0110]结果解读:单层感知机只能解决线性可分问题(AND、OR),无法解决XOR;引入隐藏层后,神经网络可以学习非线性映射,成功解决XOR。结果记录表项目结果结论AND门输出单层感知机可解决OR门输出单层感知机可解决XOR门输出单层感知机无法解决两层网络最终损失随迭代下降两层网络XOR预测接近真实标签Sigmoid取值范围(0,1)Tanh取值范围(-1,1)ReLU负区间输出0五、实验重点、难点重点:感知机的数学模型、激活函数的作用与图像、两层神经网络的前向传播与反向传播流程。难点:理解反向传播中链式法则的应用、梯度下降参数更新公式、XOR问题的非线性本质。六、操作要点建议逐段运行代码,先观察感知机结果,再观察激活函数图像,最后运行XOR神经网络。手动实现XOR网络时,注意损失函数和激活函数导数要对应(本实验使用Sigmoid+MSE)。若训练损失不降,可适当增大学习率或增加迭代次数;若损失震荡,则减小学习率。七、注意事项感知机的阶跃函数不可导,因此不能
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年厦门市康复医学会招聘笔试真题
- 鸡西鸡冠区招聘医务工作人员考试真题2025
- 预警通知单玩具厂畅销品库存不足风险7篇
- 零售行业门店店长销售业绩与管理能力绩效评定表
- 网站开发和优化操作指南
- 关于2026年营销活动KPI考核标准的确认函(6篇范文)
- 2026年度合作框架协议补充条款商洽函(4篇)范文
- 2026中国游戏行业电竞市场发展政策影响投资评估规划
- 2026面包房连锁运营物流损耗控制及托管投资
- 2026中国玻璃期货价格发现功能完善与现货市场联动机制研究
- 悬灸应用操作技术
- 2025年度航空公司票务合作协议示范文本
- 2024年国家现行有关工程施工和验收的标准、规范、规程、图集合集
- 分包合同范本(2篇)
- DB52T 1283-2018 精准扶贫 农村“组组通”硬化路建设与管理养护规范
- 2024九年级数学上学期期中测试题新版华东师大版
- 罚款单模板8则版
- CSAE标准-汽车整车气动声学风洞风噪试验-车内风噪测量方法编制说明
- GB/T 44148.2-2024承压设备用钢锻件、轧制或锻制钢棒第2部分:规定高温性能的低合金及合金(钼、铬和铬钼)钢
- 净水器售后维修合同
- (高清版)JTG 3810-2017 公路工程建设项目造价文件管理导则
评论
0/150
提交评论