正在学习深度学习 完全看不懂 请指教
1条回答 默认 最新
- joel_1993 2021-09-12 07:57关注
同学你好,这就是一个做了矩阵乘法又做激活的,然后重复一遍,最后得到的数值跟y=1做平方损失,得到的损失函数做两次梯度下降就行啊
仅供参考import numpy as np def net(X, W): #求神经网络传递输入输出 Y1 = X.dot([[W[0],W[1],W[2]],[W[3],W[4],W[5]]]) S = 1/(1+np.exp(-Y1)) Y2 = S.dot([W[6],W[7],W[8]]) return 1/(1+np.exp(-Y2)) def loss(Y,Ylabel): return 0.5*np.sum((Y-Ylabel)*(Y-Ylabel))#求损失函数(平方损失) def gradient(W, X, Ylabel, h): #求梯度 G = np.zeros(len(W)); W0 = np.zeros(len(W)); for i in range(len(W)): for j in range(len(W)): W0[j] = W[j] W0[i] = W0[i] + h Y0 = net(X,W0) Y = net(X,W) G[i] = (loss(Y0,Ylabel) - loss(Y, Ylabel))/h #求得梯度 return G X0 = np.array([1,-0.5]) W0 = np.array([1.2,2.1,1.5,-0.3,-0.7,0.3,-0.2,0.5,1.3]) Ylabel = 1 Y = net(X0, W0) h = 1e-5#求梯度的步长值 learningRate = 1 #学习率 print('初始Theta2:') #打印初始Theta2 print(np.array([W[6],W[7],W[8]])) for i in range(2): #循环两次 G = gradient(W0, X0, Ylabel, h) #第一次梯度值 W = W0 - learningRate*G Theta2_i = np.array([W[6],W[7],W[8]]) print('第{}次Theta_2 : '.format(i+1)) #打印第i次Theta2 print(Theta2_i) W0 = W Theta1_2 = np.array([[W[0],W[1],W[2]],[W[3],W[4],W[5]]])# 第二次的theta1 Theta2_2 = np.array([W[6],W[7],W[8]])# 第二次的theta2 print('\n第二次Theta2 :') print(Theta2_2)
输出情况:
初始Theta2: [-0.14804429 0.56023926 1.35200909] 第1次Theta_2 : [-0.17266922 0.53168204 1.32733078] 第2次Theta_2 : [-0.14804429 0.56023926 1.35200909] 第二次Theta2 : [-0.14804429 0.56023926 1.35200909]
这个最后两行输出就是第二次的Theta2的数值
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 1
悬赏问题
- ¥15 stata安慰剂检验作图但是真实值不出现在图上
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题