搭建一个简单的神经网络

搭建一个简单的神经网络

  1. 搭建出一个基于PyTorch架构的简易神经网络。
    代码的开始是相关包的导入。
import torch#引入Torch函数库
batch_n=100#计算100组数据
hidden_layer=100
input_data=1000#输入数据1000个特点
output_data=10#输出数据10个特点

其中batch_n代表一次输入的数据量为100,每个数据包含的特征为input_data(1000)个。hidden_layyer用于定义经过隐藏层后保留的特征个数,这里为100个。output_data为输出的数据,值为10,我们可以将输出的数据看作一个分类结果值的数量,10表示我们最后要得到10个分类的结果值。
那么这个过程可以看作是:先输入100个具有1000个特征的数据经过隐藏层后变成具有100个特征的数据,再经过输出层后输出100个具有10个分类结果值的数据,在得到结果之后计算损失并进行后向传播,这样一次模型的训练就完成了,之后反复循环,并达到优化模型参数的目的。

  1. 如何完成输入层到隐藏层进而从输出层导出的过程,代码如下:
x=torch.randn(batch_n,input_data) #输入100个具有1000个特征的数据
y=torch.randn(batch_n,output_data)#输出100个具有10个特征的数据

w1=torch.randn(input_data,hidden_layer)#输入层到隐藏层权重
w2=torch.randn(hidden_layer,output_data)#隐藏层到输出层权重

这部分很容易理解,就额是简单的线性代数矩阵的乘法。
x为1001000输入矩阵,y为10010输出矩阵。w1为1000100权重矩阵1,w2为10010权重矩阵2。x与w1,w2相乘后得到y。(这是理想情况,可是我们是通过x,y,来确定w1,w2)

  1. 还需定义训练次数和学习速率,代码如下
epoch_n=40#训练次数
learning_rate=1e-6#学习速率
  1. 对模型的正式训练如下
for epoch in range(epoch_n):	#超级大循环
    h1=x.mm(w1)	#1000*100
    h1=h1.clamp(min=0)	#将所有小于零的元素全部置于0
    y_pred=h1.mm(w2)#100*10     #前向传播预测结果
    #test=(y_pred - y).pow(2)方差
    loss=(y_pred-y).pow(2).sum()	#预测结果和原始数据偏差
    print("Epoch:{},Loss:{:.4f}".format(epoch,loss))	#输出格式规定
    grad_y_pred=2*(y_pred-y)	#梯度为偏差值的二倍
    grad_w2=h1.t().mm(grad_y_pred)
    grad_h=grad_y_pred.clone()
    grad_h=grad_h.mm(w2.t())
    grad_h.clamp_(min=0)
    grad_w1=x.t().mm(grad_h)
    w1-=learning_rate*grad_w1	#修正值
    w2-=learning_rate*grad_w2	#修正值
  1. 打印输出结果如下
Epoch:0,Loss:50603004.0000
Epoch:1,Loss:103802624.0000
Epoch:2,Loss:338273952.0000
Epoch:3,Loss:586018688.0000
Epoch:4,Loss:83174824.0000
Epoch:5,Loss:15907110.0000
Epoch:6,Loss:6975105.5000
Epoch:7,Loss:3883777.2500
Epoch:8,Loss:2597529.5000
Epoch:9,Loss:1994459.6250
Epoch:10,Loss:1673519.2500
Epoch:11,Loss:1476731.0000
Epoch:12,Loss:1338857.6250
Epoch:13,Loss:1231767.6250
Epoch:14,Loss:1142828.8750
Epoch:15,Loss:1066070.6250
Epoch:16,Loss:998218.1250
Epoch:17,Loss:937626.9375
Epoch:18,Loss:882884.5625
Epoch:19,Loss:833074.1875
Epoch:20,Loss:787542.0000
Epoch:21,Loss:745797.1250
Epoch:22,Loss:707444.6250
Epoch:23,Loss:672110.2500
Epoch:24,Loss:639469.9375
Epoch:25,Loss:609244.1875
Epoch:26,Loss:581249.1250
Epoch:27,Loss:555298.5625
Epoch:28,Loss:531179.6250
Epoch:29,Loss:508729.4375
Epoch:30,Loss:487812.9062
Epoch:31,Loss:468246.2500
Epoch:32,Loss:449898.7500
Epoch:33,Loss:432667.5312
Epoch:34,Loss:416454.0000
Epoch:35,Loss:401171.5625
Epoch:36,Loss:386744.0625
Epoch:37,Loss:373102.3438
Epoch:38,Loss:360209.1250
Epoch:39,Loss:348030.1562

Above all,loss值随着训练次数的增加,误差值不断减少,说明了优化权重的效果明显。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值