torch.nn理解(自用)

部署运行你感兴趣的模型镜像

`torch.nn` 是 PyTorch 库中的一个模块,专门用于构建和训练神经网络。

`torch.nn` 模块的关键组件:

1. **神经网络层**:
   `torch.nn` 提供了各种神经网络层,如全连接层(`nn.Linear`)、卷积层(`nn.Conv2d`)、循环层(`nn.LSTM`)等。这些层可以方便地堆叠起来,构建复杂的神经网络模型。

2. **损失函数**:
   `torch.nn` 包含了多种常用的损失函数,如均方误差损失(`nn.MSELoss`)、交叉熵损失(`nn.CrossEntropyLoss`)等,用于评估模型的性能。

3. **激活函数**:
   `torch.nn` 提供了多种激活函数,如 ReLU(`nn.ReLU`)、Sigmoid(`nn.Sigmoid`)等,用于引入非线性特性到模型中。

4. **容器类**:
   `torch.nn` 提供了一些容器类,如 `nn.Sequential` 和 `nn.ModuleList`,用于将多个层组合在一起,形成一个更大的模型。

5. **自定义模块**:
   通过继承 `nn.Module` 类,开发者可以定义自己的神经网络模块,重写 `__init__` 和 `forward` 方法,灵活地设计模型的结构和前向传播过程。

以下是一个简单的示例,展示如何使用 `torch.nn` 模块定义一个神经网络模型:

import torch
import torch.nn as nn

class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(10, 50)  # 输入层到隐藏层
        self.fc2 = nn.Linear(50, 1)   # 隐藏层到输出层
        self.relu = nn.ReLU()         # ReLU 激活函数

    def forward(self, x):
        x = self.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 创建模型实例
model = SimpleNN()

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

#!/usr/bin/env python # coding: utf-8 # In[1]: #导入需要的包 from matplotlib import pyplot as plt import numpy as np from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn import preprocessing from sklearn.linear_model import LinearRegression from sklearn.metrics import r2_score import pandas as pd import torch import torch.utils.data as Data import torch.nn as nn from torch.nn import init import torch.optim as optim # In[2]: #加载数据集 # In[3]: house_data = datasets.load_boston() print(house_data) # In[4]: plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False print(house_data.feature_names) # In[5]: x_data = house_data['data'] y_data = house_data['target'] print(x_data.shape,y_data.shape) namedata = house_data.feature_names # In[6]: # 先要查看数据的类型,是否有空值,数据的描述信息等等。 boston_df = pd.DataFrame(house_data.data, columns=house_data.feature_names) boston_df['PRICE'] = house_data.target # 计算每一个特征和房价的相关系数 boston_df.corr()['PRICE'] # In[7]: # 可以看出LSTAT、PTRATIO、RM三个特征的相关系数大于0.5,这三个特征和价格都有明显的线性关系。 plt.figure(facecolor='white') corr = boston_df.corr() corr = corr['PRICE'] corr[abs(corr) > 0.5].sort_values().plot.bar() plt.show() for i in range(13): plt.subplot(5,3,i+1) plt.scatter(x_data[:,i],y_data,s=8) plt.title(namedata[i]) plt.show() # In[8]: #清洗数据,把房屋价格为50的值去掉 i_=[] for i in range(len(y_data)): if y_data[i] == 50: i_.append(i) x_data = np.delete(x_data,i_,axis = 0) y_data = np.delete(y_data,i_,axis = 0) print(x_data.shape,y_data.shape) j_=[] for i in range(13): if namedata[i] == 'RM' or namedata[i] == 'PTRATIO' or namedata[i] == 'LSTAT': continue j_.append(i) x_data = np.delete(x_data,j_,axis=1) X_train, X_test, y_train, y_test = train_test_split(x_data,y_data,random_state=0,test_size=0.2) #print(X_train.shape, X_test.shape, y_train.shape, y_test.shape) # In[9]: print(X_train.shape, X_test.shape, y_train.shape, y_test.shape) # In[10]: lr = 0.03 batch_size = 10 #将训练数据的特征和标签组合 X_train = torch.tensor(X_train,dtype = torch.float) y_train = torch.tensor(y_train,dtype = torch.float) X_test = torch.tensor(X_test,dtype = torch.float) y_test = torch.tensor(y_test,dtype = torch.float) train_dataset = Data.TensorDataset(X_train,y_train) data_iter = Data.DataLoader( dataset = train_dataset, #torch TensorDataset format batch_size = batch_size, #mini batch size shuffle = True, #是否打乱顺序 num_workers =0, ) num_inputs = 3 net = nn.Sequential( nn.Linear(num_inputs, 1) ) print(net) # In[11]: init.normal_(net[0].weight,mean = 0, std =0.01) #normal初始化权重 init.constant_(net[0].bias,val = 0) #contant初始化方差 #定义损失函数 loss = nn.MSELoss() #定义优化算法 optimizer = optim.SGD(net.parameters(),lr=0.001) # 训练模型 num_epochs = 3 for epoch in range(1, num_epochs + 1): for X, y in data_iter: output = net(X) l = loss(output, y.view(-1, 1)) optimizer.zero_grad() l.backward() optimizer.step() print('epoch%d,loss%f' % (epoch, l.item())) # In[13]: plt.plot(y_test.detach().numpy(),color='red',linewidth = 4) plt.plot(net(X_test).detach().numpy(),color='green',linewidth = 3) plt.show() score = r2_score(y_test.detach().numpy(), net(X_test).detach().numpy()) print(score) # In[ ]: # In[14]: #回归任务 # In[15]: #初始化标准 进行归一化 min_max_scaler = preprocessing.MinMaxScaler() #分别对训练和测试的数据特征以及目标值进行标准化处理 X_train = min_max_scaler.fit_transform(X_train) X_test = min_max_scaler.fit_transform(X_test) y_train = min_max_scaler.fit_transform(y_train.reshape(-1,1)) y_test = min_max_scaler.fit_transform(y_test.reshape(-1,1)) lr = LinearRegression() lr.fit(X_train,y_train) y_test_pred = lr.predict(X_test) score = r2_score(y_test, y_test_pred) print(score) # In[16]: plt.plot(y_test,color='red',linewidth = 4) plt.plot(y_test_pred,color='green',linewidth = 3) plt.show() print(score) # In[ ]: 这段代码可以运行吗,怎么改成我自己的呢
最新发布
11-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值