torch.nn

# #规范化(Normalization):通常指将一个向量除以其范数,比如采用欧式空间距离,则用向量的方差作为范数来规范化向量。
# 在深度学习中,规范化通# 常采用极差为范数,即将向量减去最小值,并除以其极差,从而使数值范围在0到1之间。

# 标准化(Standardization):通常指将一个向量移除其位置和规模的度量。比如一个服从正态分布的向量,
#可以减去其均值,并除以其方差来标准化数据,从而获得一个服从标准正态分布的向量。

# torch.nn包提供了很多与实现神经网络中的具体功能相关的类,
# 这些类涵盖了深度神经网络模型在搭建和参数优化过程中的常用内容,
# 比如神经网络中的卷积层、池化层、全连接层这类层次构造的方法、防止过拟合的参数归一化方法、Dropout 方法,
# 还有激活函数部分的线性激活函数、非线性激活函数相关的方法,等等


# _*_coding:utf-8_*_
import torch
from torch.autograd import Variable
from collections import OrderedDict  #orderdict有序字典 模型中使用


# 批量输入的数据量
batch_n = 100
# 输入数据的特征个数
input_data = 1000
# 通过隐藏层后输出的特征数
hidden_layer = 100
# 最后输出的分类结果数
output_data = 10

#如果requires_grad的值是False,那么表示该变量在进行自动梯度计算的过程中不会保留梯度值
x = Variable(torch.randn(batch_n, input_data), requires_grad=False)
y = Variable(torch.randn(batch_n, output_data), requires_grad=False)

#直接嵌套 模型搭建
#Sequential
#只有一个隐含层 激活函数relu
models = torch.nn.Sequential(
    # 首先通过其完成从输入层到隐藏层的线性变换
    #Linear类接收的参数有三个,分别是输入特征数、输出特征数和是否使用偏置(默认为True,即使用偏置)
    #Linear类自动生成对应维度的权重参数和偏置
    #模型默认使用了一种比之前的简单随机方式更好的参数初始化方法
    torch.nn.Linear(input_data,hidden_layer),
    # 经过激活函数
    torch.nn.ReLU(),
    # 最后完成从隐藏层到输出层的线性变换
    torch.nn.Linear(hidden_layer,output_data)
)
print(models)

# 打印结果
# Sequential(
#   (0): Linear(in_features=1000, out_features=100, bias=True)
#   (1): ReLU()
#   (2): Linear(in_features=100, out_features=10, bias=True)
# )


#使用orderdict有序字典 模型搭建
#Sequential
#只有一个隐含层 激活函数relu

models_orderdict = torch.nn.Sequential(OrderedDict([
    ("Linel",torch.nn.Linear(input_data,hidden_layer)),
    ("ReLU1",torch.nn.ReLU()),
    ("Line2",torch.nn.Linear(hidden_layer,output_data))
])
)
print(models_orderdict)
# 打印结果
# Sequential(
#   (Linel): Linear(in_features=1000, out_features=100, bias=True)
#   (ReLU1): ReLU()
#   (Line2): Linear(in_features=100, out_features=10, bias=True)
# )

epoch_n = 50
learning_rate = 1e-4

loss_fn = torch.nn.MSELoss()

#均方误差函数类torch.nn.MSELoss来计算损失值
loss_f_MSELoss = torch.nn.MSELoss()
#随机方式生成了两个维度都是(100,100)的参数
x = Variable(torch.randn(100,100))
y = Variable(torch.randn(100,100))
#使用均方误差函数来计算两组参数的损失值
loss = loss_f_MSELoss(x,y)
print(loss)
# 打印结果
#tensor(2.0118)

#L1Loss类使用平均绝对误差函数对损失值进行计算
loss_f_L1Loss = torch.nn.L1Loss()
x = Variable(torch.randn(100,100))
y = Variable(torch.randn(100,100))
loss1 = loss_f_L1Loss(x,y)
print(loss1)
# 打印结果
#tensor(1.1350)

#CrossEntropyLoss类用于计算交叉熵
loss_f_CrossEntropyLoss = torch.nn.CrossEntropyLoss()
x = Variable(torch.randn(3,5))#随机参数,维度为(3,5)
y = Variable(torch.LongTensor(3).random_(5))#3个范围为0~4的随机数字
loss2 = loss_f_CrossEntropyLoss(x,y)
print(loss2)
# 打印结果
#tensor(1.6983)


for epoch in range(epoch_n):
    y_pred = models(x)
    #y_pred = models_orderdict(x)
    loss = loss_fn(y_pred, y)
    if epoch % 1000 == 0:
        print("Epoch:{},Loss:{:.4f}".format(epoch, loss.data))
    models.zero_grad()

    loss.backward()

    for param in models.parameters():
        param.data -= param.grad.data * learning_rate
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值