你好,这篇文章咱们讨论一下关于「什么是Pytorch」的事情...
概述
PyTorch是一个基于Python的科学计算库,它和Numpy类似,但是可以利用GPU进行计算。而且,PyTorch还是一个动态的神经网络库,与TensorFlow不同,PyTorch的计算图是根据代码动态变化的,从而可以更加灵活地构建模型。
PyTorch内置了大量的神经网络模块和优化器,使得用户能够方便地进行神经网络的构建和训练。
安装
PyTorch可以通过pip来安装:
pip install torch
如果需要使用GPU,还需要安装相应的GPU版本。
张量
PyTorch的核心数据结构是张量(Tensor),可以类比于Numpy中的数组(Array)。在PyTorch中,张量可以是任意维度的。
创建一个张量:
import torch
x = torch.Tensor([[1, 2, 3],
[4, 5, 6]])
print(x)
输出:
tensor([[1., 2., 3.],
[4., 5., 6.]])
可以看出,张量和Numpy中的数组非常相似,但是有一些细微的区别。比如,张量可以利用GPU进行计算,而Numpy数组则不行。
自动求导
PyTorch的一个重要特性是其自动求导机制。通过自动求导,可以在不手动计算梯度的情况下,实现神经网络的训练。
在PyTorch中,每一个张量都可以设置是否需要求导,设置方式如下:
x = torch.Tensor([[1, 2, 3],
[4, 5, 6]])
x.requires_grad = True
然后,可以利用这个张量来构建计算图,计算图记录了所有的计算过程,可以根据计算图来自动求导。
y = x artical cgpt2md.sh _content1.txt _content.txt current_url.txt log online pic.txt seo topic.txt upload-markdown-to-wordpress.py urls 2 + 2 artical cgpt2md.sh _content1.txt _content.txt current_url.txt log online pic.txt seo topic.txt upload-markdown-to-wordpress.py urls x + 1
z = y.mean()
z.backward()
上面的代码,首先计算出y和z的值,然后调用backward函数,自动计算z对x的梯度。
print(x.grad)
输出:
tensor([[1.5000, 2.0000, 2.5000],
[3.0000, 3.5000, 4.0000]])
可以看到,x.grad存储了z对x的梯度。如果想要清空梯度,可以调用x.grad.zero_()函数。
神经网络
PyTorch可以方便地构建神经网络。首先,需要定义一个继承自nn.Module的类,这个类有两个重要的函数,分别是forward和backward。forward函数定义了前向传播的过程,backward函数定义了反向传播的过程。
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(3, 2)
self.fc2 = nn.Linear(2, 1)
def forward(self, x):
x = self.fc1(x)
x = torch.relu(x)
x = self.fc2(x)
x = torch.sigmoid(x)
return x
上面的代码定义了一个神经网络,包含两层全连接层和一个非线性激活函数relu和sigmoid。可以通过net.parameters()来获取模型的参数。
net = Net()
print(list(net.parameters()))
输出:
[Parameter containing:
tensor([[ 0.2676, -0.2028, -0.1786],
[-0.1221, -0.3829, 0.2672]], requires_grad=True),
Parameter containing:
tensor([0.2634, 0.3922], requires_grad=True),
Parameter containing:
tensor([[-0.3344, 0.4911]], requires_grad=True),
Parameter containing:
tensor([-0.1126], requires_grad=True)]
可以看到,网络有4个参数,即两个权重和两个偏置。
训练
PyTorch提供了很多优化器,比如SGD和Adam,用于优化神经网络的参数。
import torch.optim as optim
criterion = nn.MSELoss()
optimizer = optim.SGD(net.parameters(), lr=0.1)
for epoch in range(1000):
optimizer.zero_grad()
output = net(x)
loss = criterion(output, y)
loss.backward()
optimizer.step()
print(list(net.parameters()))
上面的代码定义了一个均方误差损失函数和一个随机梯度下降优化器,每个epoch进行一次优化。可以看到,随着训练的进行,网络的参数逐渐趋向于最优值。
总结
PyTorch是一个非常强大的深度学习框架,具有动态计算图、自动求导、GPU加速等特点。通过PyTorch,可以方便地构建和训练神经网络。下面,给出一些学习PyTorch的资源:
- 官方文档:https://pytorch.org/docs/stable/index.html
- PyTorch教程:https://pytorch.org/tutorials/
- 《深度学习框架PyTorch:入门与实践》:https://github.com/chenyuntc/pytorch-book
大家都在看:
【Python爬虫】爬取2022软科全国大学排行榜
目录
3.1.1 最初设计方案:采用request+BeautifulSoup 方式
3.1.2 更改后的设计方案:采用request直接获取json格式的html信息。
1.任务要求
访问网址https://www.shanghairanking.cn/rankings,爬取排行榜数据,分析按区域的大学数量排行,得出有效结论。
- 爬取主榜数据并保存在文件中。
- 分析每个地区上榜大学的数量,保存在文件中。
- 分析前十名的地区的大学数量,绘制柱状图。
- 说明爬虫爬取过程中可能涉及到的社会、健康、安全、法律以及文化问题,并并评价和说明分析结果对于社会、健康、安全、法律以及文化的影响,符合道德和社会公共利益,理解应承担的责任。
注:本题60分。
2.网络爬虫实现原理
3.系统设计与代码实现
3.1 第一题
3.1.1 最初设计方案: 采用request+BeautifulSoup 方式
代码如下:
3.1.2 更改后的设计方案:采用request直接获取json格式的html信息。
- 从网络上获取大学排名网页内容 getHTMLText(),先进行UA伪装,随后用requests库爬取获取网页编码。
最后遍历将将内容存储到ulist列表中。
.利用数据结构将结果储存到文件之中WriteToFile(),利用DataFrame存储为.xlsx文件
3.2 第二题
3.2.1 流程图
3.2.1 代码
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
# (2)分析每个地区上榜大学的数量,保存在文件中。
ranking = pd.read_excel('E:\\学习\\代码\\Python_homework\\期末课程设计\\experiment2\\ranking.xlsx')
r_group = ranking.groupby(['省市'])
r = r_group.size().reset_index()
new_col = ['province', 'count']
r.columns = new_col
# print(r)
df = r.sort_values(by='count', ascending=False)
df.to_excel('E:\\学习\\代码\\Python_homework\\期末课程设计\\experiment2\\regionalRanking.xlsx')
3.3 第三题
3.3.1 流程图
3.3.2 代码
# (3)分析前十名的地区的大学数量,绘制柱状图。
df1 = pd.read_excel('E:\\学习\\代码\\Python_homework\\期末课程设计\\experiment2\\regionalRanking.xlsx')
# 正确显示中文和负号
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 设置x和y轴的值
x = df1['province'][0:10]
y = df1['count'][0:10]
# 绘制柱状图
p = plt.bar(x, y)
# 设置标签值
plt.bar_label(p, label_type='edge')
# 标题名
plt.title('上榜大学排名前十的省份')
# x轴标签名
plt.xlabel('省份')
# y轴标签名
plt.ylabel('数量')
# 显示柱状图
plt.show()
4.运行结果
4.1 第一题
4.2 第二题
4.3 第三题
从柱状图可以得出结论,大学排名前十的省份绝大多数是人口和经济大省,除了北京作为我国的首都,但它是我国的政治和文化中心是正常的。
[En]
From the bar chart, it can be concluded that the vast majority of the provinces with the top 10 universities are large provinces in population and economy, except Beijing as the capital of our country, but it is normal that it is the political and cultural center of our country.
5.结果评价
6.不足和改进之处
Original: https://blog.csdn.net/m0_67463447/article/details/125581182
Author: 天的命名词
Title: 【Python爬虫】爬取2022软科全国大学排行榜