pytorch深度学习实战lesson10

第十课 Softmax回归

目录

第十课 Softmax回归

理论部分

Softmax回归

损失函数

1、均方损失

2、绝对值损失函数

3、哈勃鲁棒损失函数

实践部分

一、图像分类数据集的读取及其它操作

二、softmax回归从零开始实现

三、softmax简洁实现


理论部分

Softmax回归

它其实是个分类问题。

回归与分类的区别:

回归其实是估计一个连续值;而分类是预测一个离散类别。

分类举例:

从回归如何过渡到分类?

1、对类别进行一位有效编码,因为类别不是一个数而是个字符串,一个数据集中可能有好多个类别,所以要对每个类别进行编码。

假设真实类别是第i个,则yi=1,其他类别为0.

2、使用均方损失训练

3、置信度最大的输出值作为预测

分类问题不关心每个类别实际的值,它主要关心的是正确类别的置信度是否特别大。

也就是说,正确类别的置信度oy要远远大于非正确类别的置信度oi。这样模型就能保证将正确的类别和不正确的类别拉开距离。

我们只关心oy与oi的相对大小,因此oy和oi的值无所谓其大小。但是如果能把它们都量化到一个区间(变成概率值),会简化后面的计算。

通过下图所示的公式可以得到真实类别的概率和预测类别的概率。

通过比较两个概率的区别可得到损失。这里使用交叉熵损失:

逐渐使其梯度等于0就可以使得预测的o逐渐靠近真实的y。

损失函数

损失函数是衡量预测值与真实值区别的东西。

1、均方损失

除以二的作用是与求完导的2抵消。

蓝色是损失函数曲线,绿色是似然函数,橙线是损失函数的梯度。可以看出当预测值远离原点时,梯度是越来越大的,也就是说更新参数的幅度越来越大;反之,当预测值接近原点时,梯度越来越小,也就是说参数更新的幅度也越来越小。

这样并不是最好的,因为离原点比较远的时候,我可能并不需要如此大的幅度去更新参数。因此可以考虑:

2、绝对值损失函数

蓝色是损失函数的曲线,绿色是似然函数,橙线是损失函数的梯度,它的梯度要么不存在要么是正负一。可以看出这个损失函数弥补了均方损失当离原点远(预测值与真实值隔得比较远时)时梯度大的缺点。绝对值损失函数当预测值与真实值隔得比较远时,它的梯度要么是1要么是-1,永远是常数,对参数的更新是比较稳定的。

但是它的缺点也很明显就是零点处不可导,正负一跳变巨大,这就表明到了参数优化后期时,会不太稳定。

为了避免上述两种损失函数的缺点,接下来提出:

3、哈勃鲁棒损失函数

蓝色是损失函数的曲线,绿色是似然函数,橙线是损失函数的梯度。这个损失函数的设计思路是:当预测值与真实值相隔较远时,就是绝对值误差;当预测值与真实值相隔较近时,就是平方误差。相当于把前两种损失函数各取一半拼一起了。当然它的导数也就沿袭了前两种损失函数的优点:当预测值与真实值相隔较远时,梯度要么为1要么为-1.很稳定;当预测值与真实值相隔较近时,梯度会慢慢变小,也很稳定。

实践部分

一、图像分类数据集的读取及其它操作

代码:

#《《《《《-----图片分类数据集-----》》》》》
#%matplotlib_inline
#MNIST数据集是图像分类中广泛使用的数据集之一,
#但作为基准数据集过于简单。我们将使用类似但更复杂的Fashion-MNIST数据集
import torch
import torchvision
from torch.utils import data                                    #小批量读取数据
from torchvision import transforms
from d2l import torch as d2l
import matplotlib.pyplot as plt

d2l.use_svg_display()                                           #使用svg显示图片会更清晰一些
#通过框架中的内置函数将 Fashion-MNIST 数据集下载并读取到内存中
trans = transforms.ToTensor()#通过totensor实例将图像数据从pil类型变成32位浮点数格式,并除以255使得所有像素的数值在0到1之间
mnist_train = torchvision.datasets.FashionMNIST(root="../data", train=True,#训练数据集
                                                transform=trans,#得到的是pytorch的tensor,而不是一堆图片
                                                download=True)#默认从网上下载
mnist_test = torchvision.datasets.FashionMNIST(root="../data", train=False,#测试集,不用训练
                                               transform=trans, download=True)
print(len(mnist_train), len(mnist_test))#60000个训练集,10000个测试集
print(mnist_train[0][0].shape)#第一张图片的形状torch.Size([1, 28, 28])由于是黑白图片,所以第一个参数是1表示白,
                              #长和宽是28
#两个可视化数据集的函数
def get_fashion_mnist_labels(labels):
    """返回Fashion-MNIST数据集的文本标签。"""
    text_labels = [
        't-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt',
        'sneaker', 'bag', 'ankle boot']
    return [text_labels[int(i)] for i in labels]

def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5):
    """Plot a list of images."""
    figsize = (num_cols * scale, num_rows * scale)
    _, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)
    axes = axes.flatten()
    for i, (ax, img) in enumerate(zip(axes, imgs)):
        if torch.is_tensor(img):
            ax.imshow(img.numpy())
            #plt.show()
        else:
            ax.imshow(img)
            #plt.show()
        ax.axes.get_xaxis().set_visible(False)
        ax.axes.get_yaxis().set_visible(False)
        if titles:
            ax.set_title(titles[i])
    return axes
#几个样本的图像及其相应的标签
X, y = next(iter(data.DataLoader(mnist_train, batch_size=18)))
show_images(X.reshape(18, 28, 28), 2, 9, titles=get_fashion_mnist_labels(y))#画两行每行九张图,还要拿到标签
plt.show()
#读取一小批量数据,大小为batch_size
batch_size = 256

def get_dataloader_workers():#一般来讲数据是放在硬盘上的,所以可能需要多个进程去将数据读取到内存中。
    """使用4个进程来读取数据。"""
    return 4

train_iter = data.DataLoader(mnist_train, batch_size, shuffle=True,
                             num_workers=get_dataloader_workers())

'''timer = d2l.Timer()#检测CPU读取一次数据的时间
for X, y in train_iter:
    continue
print(f'{timer.stop():.2f} sec')'''
#定义 load_data_fashion_mnist 函数
def load_data_fashion_mnist(batch_size, resize=None):
    """下载Fashion-MNIST数据集,然后将其加载到内存中。"""
    trans = [transforms.ToTensor()]
    if resize:
        trans.insert(0, transforms.Resize(resize))
    trans = transforms.Compose(trans)
    mnist_train = torchvision.datasets.FashionMNIST(root="../data",
                                                    train=True,
                                                    transform=trans,
                                                    download=True)
    mnist_test = torchvision.datasets.FashionMNIST(root="../data",
                                                   train=False,
                                                   transform=trans,
                                                   download=True)
    return (data.DataLoader(mnist_train, batch_size, shuffle=True,
                            num_workers=get_dataloader_workers()),
            data.DataLoader(mnist_test, batch_size, shuffle=False,
                            num_workers=get_dataloader_workers()))

train_iter, test_iter = load_data_fashion_mnist(32, resize=64)
for X, y in train_iter:
    print(X.shape, X.dtype, y.shape, y.dtype)
    break

二、softmax回归从零开始实现

代码:

#《《《《《《《《《《《《《从零开始softmax》》》》》》》》》》》》》》》》
import torch
from IPython import display
from d2l import torch as d2l
import matplotlib.pyplot as plt #要自己加,不然出不来图

batch_size = 256#每次随机读256张图片
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)     #返回训练集测试集的迭代器
#将展平每个图像,把它们看作长度为784的向量。 因为我们的数据集有10个类别,所以网络输出维度为 10
num_inputs = 784        #在softmax里需要把图片拉成向量28*28=784
num_outputs = 10        #十类

W = torch.normal(0, 0.01, size=(num_inputs, num_outputs), requires_grad=True)#定义权重,行数是输入个数784,列数是输出个数10
b = torch.zeros(num_outputs, requires_grad=True)        #对每一个输出都要有一个偏移,所有偏移是长为10的向量
#给定一个矩阵X,我们可以对所有元素求和(示例)
'''X = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
X.sum(0, keepdim=True), X.sum(1, keepdim=True)'''
#实现softmax
def softmax(X):
    X_exp = torch.exp(X)
    partition = X_exp.sum(1, keepdim=True)      #对一个矩阵来讲,就是对矩阵的每一行进行softmax
    return X_exp / partition                    #使用广播机制对每一行除partition
#我们将每个元素变成一个非负数。此外,依据概率原理,每行总和为1(验证)
'''X = torch.normal(0, 1, (2, 5))
X_prob = softmax(X)
print(X_prob, X_prob.sum(1))#可见softmax之后,每个元素变成非负,而且每行和为1.'''
#实现softmax回归模型
def net(X):
    return softmax(torch.matmul(X.reshape((-1, W.shape[0])), W) + b)#x被reshape成了256*784的矩阵
#创建一个数据y_hat,其中包含2个样本在3个类别的预测概率, 使用y作为y_hat中概率的索引(示例)
'''y = torch.tensor([0, 2])
y_hat = torch.tensor([[0.1, 0.3, 0.6], [0.3, 0.2, 0.5]])
print(y_hat[[0, 1], y])#它的输出是y_hat0[y[0]],和y_hat1[y[1]],也就是y_hat0[0],和y_hat1[2]'''
#实现交叉熵损失函数
def cross_entropy(y_hat, y):
    return -torch.log(y_hat[range(len(y_hat)), y])#给定预测和真实标号y后,求出对应的真实标号的预测值,再求log和-

#将预测类别与真实 y 元素进行比较
def accuracy(y_hat, y):
    """计算预测正确的数量。"""
#如果y_hat是矩阵,那么假定第二个维度存储每个类的预测分数。 我们使用argmax获得每行中最大元素的索引来获得预测类别。
# 然后我们将预测类别与真实y元素进行比较。 由于等式运算符“==”对数据类型很敏感,因此我们将y_hat的数据类型转换为与y的数据类型一致。
# 结果是一个包含0(错)和1(对)的张量。最后,我们求和会得到正确预测的数量。
    if len(y_hat.shape) > 1 and y_hat.shape[1] > 1:
        y_hat = y_hat.argmax(axis=1)
    cmp = y_hat.type(y.dtype) == y
    return float(cmp.type(y.dtype).sum())

#我们可以评估在任意模型 net 的准确率
def evaluate_accuracy(net, data_iter):
    """计算在指定数据集上模型的精度。"""
    if isinstance(net, torch.nn.Module):
        net.eval()#转成评估模式,不必计算梯度
    metric = Accumulator(2)#  正确预测数、预测总数
    for X, y in data_iter:
        metric.add(accuracy(net(X), y), y.numel())#将正确预测的数量和总数加入累加器accumulator中
    return metric[0] / metric[1]#分类正确样本数与总的相除
#这里定义一个实用程序类Accumulator,用于对多个变量进行累加。
# 在上面的evaluate_accuracy函数中, 我们在Accumulator实例中创建了2个变量, 分别用于存储正确预测的数量和预测的总数量。
# 当我们遍历数据集时,两者都将随着时间的推移而累加。
class Accumulator:
    """在`n`个变量上累加。"""
    def __init__(self, n):
        self.data = [0.0] * n

    def add(self, *args):
        self.data = [a + float(b) for a, b in zip(self.data, args)]

    def reset(self):
        self.data = [0.0] * len(self.data)

    def __getitem__(self, idx):
        return self.data[idx]

#Softmax回归的训练
def train_epoch_ch3(net, train_iter, loss, updater):  #@save
    """训练模型一个迭代周期(定义见第3章)"""
    # 将模型设置为训练模式
    if isinstance(net, torch.nn.Module):
        net.train()
    # 训练损失总和、训练准确度总和、样本数
    metric = Accumulator(3)
    for X, y in train_iter:
        # 计算梯度并更新参数
        y_hat = net(X)
        l = loss(y_hat, y)
        if isinstance(updater, torch.optim.Optimizer):
            # 使用PyTorch内置的优化器和损失函数
            updater.zero_grad()#梯度置零
            l.mean().backward()#计算梯度
            updater.step()#参数更新
        else:
            # 使用定制的优化器和损失函数
            l.sum().backward()
            updater(X.shape[0])
        metric.add(float(l.sum()), accuracy(y_hat, y), y.numel())
    # 返回训练损失和训练精度
    return metric[0] / metric[2], metric[1] / metric[2]#损失的累加除以样本数,所有分类正确的除以样本总数
#定义一个在动画中绘制数据的实用程序类,可以实时看到训练过程中的变化,主要是使用matplotlib中的工具画各种东西
class Animator:  #@save
    """在动画中绘制数据"""
    def __init__(self, xlabel=None, ylabel=None, legend=None, xlim=None,
                 ylim=None, xscale='linear', yscale='linear',
                 fmts=('-', 'm--', 'g-.', 'r:'), nrows=1, ncols=1,
                 figsize=(3.5, 2.5)):
        # 增量地绘制多条线
        if legend is None:
            legend = []
        d2l.use_svg_display()
        self.fig, self.axes = d2l.plt.subplots(nrows, ncols, figsize=figsize)
        if nrows * ncols == 1:
            self.axes = [self.axes, ]
        # 使用lambda函数捕获参数
        self.config_axes = lambda: d2l.set_axes(
            self.axes[0], xlabel, ylabel, xlim, ylim, xscale, yscale, legend)
        self.X, self.Y, self.fmts = None, None, fmts

    def add(self, x, y):
        # 向图表中添加多个数据点
        if not hasattr(y, "__len__"):
            y = [y]
        n = len(y)
        if not hasattr(x, "__len__"):
            x = [x] * n
        if not self.X:
            self.X = [[] for _ in range(n)]
        if not self.Y:
            self.Y = [[] for _ in range(n)]
        for i, (a, b) in enumerate(zip(x, y)):
            if a is not None and b is not None:
                self.X[i].append(a)
                self.Y[i].append(b)
        self.axes[0].cla()
        for x, y, fmt in zip(self.X, self.Y, self.fmts):
            self.axes[0].plot(x, y, fmt)
        self.config_axes()
        display.display(self.fig)
        display.clear_output(wait=True)
#小批量随机梯度下降来优化模型的损失函数
lr = 0.1
def updater(batch_size):
    return d2l.sgd([W, b], lr, batch_size)
#训练函数
#接下来我们实现一个训练函数, 它会在train_iter访问到的训练数据集上训练一个模型net。
#该训练函数将会运行多个迭代周期(由num_epochs指定)。
#在每个迭代周期结束时,利用test_iter访问到的测试数据集对模型进行评估。 我们将利用Animator类来可视化训练进度。
num_epochs = 10
def train_ch3(net, train_iter, test_iter, loss, num_epochs, updater):
    """训练模型"""
    animator = Animator(xlabel='epoch', xlim=[1, num_epochs], ylim=[0.3, 0.9],
                        legend=['train loss', 'train acc', 'test acc'])#可视化的一个animator
    for epoch in range(num_epochs):
        train_metrics = train_epoch_ch3(net, train_iter, loss, updater)
        test_acc = evaluate_accuracy(net, test_iter)
        animator.add(epoch + 1, train_metrics + (test_acc,))
    train_loss, train_acc = train_metrics
    assert train_loss < 0.5, train_loss
    assert train_acc <= 1 and train_acc > 0.7, train_acc
    assert test_acc <= 1 and test_acc > 0.7, test_acc
train_ch3(net, train_iter, test_iter, cross_entropy, num_epochs, updater)
plt.show()#要自己加,不然出不来图
#对图像进行分类预测
#现在训练已经完成,我们的模型已经准备好对图像进行分类预测。
#给定一系列图像,我们将比较它们的实际标签(文本输出的第一行)和模型预测(文本输出的第二行)。
def predict_ch3(net, test_iter, n=6):
    """预测标签(定义见第3章)。"""
    for X, y in test_iter:
        break
    trues = d2l.get_fashion_mnist_labels(y)
    preds = d2l.get_fashion_mnist_labels(net(X).argmax(axis=1))
    titles = [true + '\n' + pred for true, pred in zip(trues, preds)]
    d2l.show_images(X[0:n].reshape((n, 28, 28)), 1, n, titles=titles[0:n])
    plt.show()#要自己加,不然出不来图
predict_ch3(net,test_iter)

三、softmax简洁实现

代码:

import torch
from torch import nn
from d2l import torch as d2l
import matplotlib.pyplot as plt #要自己加,不然出不来图
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
# softmax回归的输出层是一个全连接层。 因此,为了实现我们的模型,
# 我们只需在Sequential中添加一个带有10个输出的全连接层。 同样,在这里Sequential并不是必要的,
# 但它是实现深度模型的基础。
# 我们仍然以均值0和标准差0.01随机初始化权重。
#Softmax 回归的输出层是一个全连接层
# PyTorch不会隐式地调整输入的形状。因此,
# 我们在线性层前定义了展平层(flatten),来调整网络输入的形状
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))#flatten的作用是把任何维度的tensor变成二维的tensor
# ,第零维度保留,其他维度全部弄成向量
def init_weights(m):#生成随机值的函数,用于初始化
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)#把weight的均值弄成0(默认),方差0.01的随机值
net.apply(init_weights)#完成初始化
#在交叉熵损失函数中传递未归一化的预测,并同时计算softmax及其对数
loss = nn.CrossEntropyLoss()

#使用学习率为0.1的小批量随机梯度下降作为优化算法。我们使用学习率为0.1的小批量随机梯度下降作为优化算法。
# 这与我们在线性回归例子中的相同,这说明了优化器的普适性。
trainer = torch.optim.SGD(net.parameters(), lr=0.1)

#调用 之前 定义的训练函数来训练模型
num_epochs = 10
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
plt.show()#要自己加,不然出不来图
#和以前一样,这个算法使结果收敛到一个相当高的精度,而且这次的代码比之前更精简了。

为啥没loss曲线?

按住Ctrl然后鼠标左键“train_ch3”后,在torch.py里找train_epoch_ch3 这个函数

要在d2l/torch.py里面改一下 train_epoch_ch3 这个函数 ,如下就可以了
if isinstance(updater, torch.optim.Optimizer):
# Using PyTorch in-built optimizer & loss criterion
updater.zero_grad()
l.backward()
updater.step()
metric.add(
float(l) * len(y), accuracy(y_hat, y),
y.size().numel())
else:
# Using custom built optimizer & loss criterion
l.sum().backward()
updater(X.shape[
0])
metric.add(float(l.sum()), accuracy(y_hat, y), y.numel())

wo~he!
关注 关注
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
lesson9.py
01-26
lesson9.py
lesson9
03-31
lesson9
lesson9.ipynb
11-06
lesson9.ipynb
新概念二册 Lesson 9 A cold welcome冷遇 (时间的介词短语)
CleverCode的博客
01-10 1010
文章目录1 课文2 单词2.1. welcome [ˈwelkəm] n. 欢迎2.2. crowd [kraʊd] n. 人群2.3 gather [ˈgæðə(r)] v.聚集2.4 hand [hænd] n. (表或机器的)指针2.5 refuse [rɪˈfju:z] 拒绝2.6 shout [ʃaʊt] v.喊叫2.7 laugh [lɑ:f] v.笑 1 课文...
动手学深度学习之数据增强、模型微调
water19111213的博客
02-25 3400
参考伯禹学习平台《动手学深度学习》课程内容内容撰写的学习笔记 原文链接:https://www.boyuai.com/elites/course/cZu18YmweLv10OeV/lesson/6zsAsvcJ58UKvWtKArTqwq 感谢伯禹平台,Datawhale,和鲸,AWS给我们提供的免费学习机会!! 总的学习感受:伯禹的课程做的很好,课程非常系统,每个较高级别的课程都会有需要掌握的前...
pytorch深度学习实战lesson7
weixin_48304306的博客
11-07 448
主要研究一下各种情况下的A对B求导的结果。
pytorch深度学习实战lesson4
weixin_48304306的博客
10-11 508
手写数字体识别问题,理论+实践
Pytorch深度学习入门与实战课程
09-13
给大家分享一套课程——《Pytorch深度学习入门与实战》,2022年7月最新升级完整版25章,课程包升级。课程配套有完整的代码+课件+数据集下载。 Pytorch深度学习入门与实战课程是一套系统实战课程,结合了超多的经典...
PyTorch深度学习简明实战.docx
09-13
PyTorch深度学习简明实战.docx
Pytorch深度学习实战代码文件
10-10
本资源是pytorch 深度学习实战的代码文件,书中设涉及到的都有。 原书《Pytorch 深度学习实战》 作者:伊莱 斯蒂文斯 牟大恩 译
pytorch深度学习实战微视频版.zip
10-16
pytorch深度学习实战微视频版.zip
pytorch深度学习入门与简明实战教程2022
10-05
2.深度学习基础与线性回归实例 3.pytorch张量 4.逻辑回归与多层感知机 5.多分类问题 6.手写数字全连接模型 7.基础部分总结 8.计算机视觉基础 9.预训练模型(迁移学习) 10.Dataset数据输入 11.现代网络架构 12.图像...
《动手学深度学习》学习记录3.2——准备图像分类数据集
2202_75996203的博客
11-25 61
冬日的早晨总是难起,所幸还剩下一两个小时,也不知道今天上午能否写完。笔者昨日突遭torch和torchvision的版本兼容性背刺,又是检查环境又是查官方文档的推荐版本,结果啥也没查出来,最后清除了一下pytorch缓存再重启vscode却发现奇迹般地work了。笔者觉得这是一种幸运,也不知道下一次还会不会如此幸运,可能正是这些实践过程中的各种意外情况让笔者这个小白成长吧。昨日笔者一边在还专业课内欠下的债,一边学习李沐老师的课程,两边的新东西一齐涌来,深感脑子要长出来了。
新概念英语 lesson 9
qyweiyy88的专栏
09-15 389
生词: office  assisstant : 办公室勤杂人员。 名词变复数时一般在后面加‘s’如果名词的尾字母为‘x,s,sh,ch'时则在后面加’es',如果是以‘fe,f''则在去除’fe,f'.加‘ves'.man,woman的得数形式为men,women. ha
Lesson 9 How are you today?  今天好吗?
浅浅的小溪
01-04 746
Listen to the tape then answer this question. How is Emma?听录音,然后回答问题。埃玛身体好吗?STEVEN: Hello, Helen.HELEN:  Hi, Steven.STEVEN: How are you today?HELEN:  Im very well, thank you.         And yo
强化学习——学习笔记3
qq_52302919的博客
05-29 1735
先上图:在上述流程图中所说的Q表即为下表:假设我们在玩一个小游戏,该游戏有上下左右不同的动作,同时也会有不同的状态,比如游戏结束等。Q表也可以称为状态-价值函数QsaQ(s,a)Qsa:这个表格的每一行代表每个 state上述例子中的游戏结束等,每一列代表每个 action上述例子中的上下左右,表格的数值就是在各个 state 下采取各个 action 时能够获得的最大的未来期望奖励。
pytorch学习笔记5
最新发布
drarad的博客
06-02 1279
前向钩子(forward hook)在模块的前向传播开始时触发,前向后钩子(forward pre-hook)在前向传播之前触发,反向钩子(backward hook)在反向传播过程中触发。总结来说,钩子提供了一种在 PyTorch 模型的执行过程中插入自定义代码的方法,使得用户可以灵活地调试、监控和扩展模型的功能。作用: 这是一个内部的 C 语言指针,指向张量在底层库(通常是 C++ 实现的 PyTorch 核心)中的具体数据结构。这些钩子可以在张量的梯度计算之前或之后执行自定义的操作。
AI推文神器,绘唐ai,文刻创作出品,sdmj二合一虹猫
2401_84285498的博客
05-28 768
然而,值得注意的是,AI推文神器虽然能够生成高质量的推文内容,但仍然需要人类的审查和修改。因为它虽然能够模仿人类的写作风格,但仍然无法完全理解人类的情感和语境,因此在使用AI推文神器时,人类编辑和审阅的角色仍然十分重要,以确保推文的准确性和符合品牌形象。AI推文神器的工作原理是通过自然语言处理和机器学习算法,将用户输入的关键词、主题或简要描述转化为语义信息,然后结合相关数据和模型,生成相应的推文内容。它通过分析大量的文字和数据,学习并模仿人类的写作风格和推文技巧,从而能够生成独特、有吸引力的推文内容。
pytorch深度学习实战
06-07
很高兴回答您的问题。关于PyTorch深度学习实战,我可以推荐一本书给您: 《PyTorch深度学习实战》(作者:唐进民、张伟民、李沐),该书详细介绍了PyTorch的基础知识和深度学习实战应用,包括卷积神经网络、循环神经网络、自然语言处理和计算机视觉等多个领域的应用案例。 此外,还有一些在线资源可以供您学习PyTorch深度学习实战,比如: 1. PyTorch官方文档:https://pytorch.org/docs/stable/index.html 2. PyTorch官方教程:https://pytorch.org/tutorials/ 3. PyTorch中文文档:https://pytorch-cn.readthedocs.io/zh/latest/ 希望这些资源能够帮助您深入学习PyTorch深度学习实战。如果您有其他问题,请继续提问。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • win11一开机就显示“无法打开这个应用,查看Microsoft store,了解有关Nahimic的详细信息”怎么解决? 20182
  • verilog拼接符及其它符号的用法 7868
  • python文件如何打包生成.exe文件?(打包教程) 7283
  • NOC架构详解 6265
  • win11打开视频时显示“播放失败”,怎么解决? 4542

分类专栏

  • 制作类mnist金融数据集 5篇
  • py-bug 4篇
  • 神经网络 12篇
  • GPU 1篇
  • verilog 12篇
  • HDLBITS 13篇
  • 拓扑 1篇
  • 网络拓扑 1篇
  • 网络架构 1篇
  • GDMA 1篇
  • DLP-M 1篇
  • 存储器 2篇

最新评论

  • 一些关于FPGA的参数(LUT LATCH FF)

    cai-LF: 不错,学习了。

  • 深度学习处理器架构之GDMA学习笔记

    huiyizhinan: 啥是DLP-M?

  • “你需要来自laptop。。。的权限才能对此文件进行更改”怎么解决?已解决

    qq_58830579: 还真是,我也是这样

  • conda创建虚拟环境时报错:InvalidArchiveError(“Error with archive C:\\Users\\..\\.conda\\pkgs\\wheel-0.38.4....

    Pepper100: 真的解决了,好开心,谢谢博主

  • NOC架构详解

    农民真快落: 如何理解:“由于地址空间有限而引起的扩展性问题”, 总线通信架构下同一时刻已有一对主从设备进行通信,应该不需要很多的地址空间吧。有人懂总线架构的可扩展性差到底指什么吗?

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 《如何制作类mnist的金融数据集》(完结篇)——4、如何使用生成的ubyte文件?
  • 《如何制作类mnist的金融数据集》——3.生成index.ubyte文件
  • 《如何制作类mnist的金融数据集》——2.生成28*28灰度图
2024年5篇
2023年14篇
2022年96篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wo~he!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司临汾建设网站推荐塘坑网站改版哪家好驻马店网站改版价格赤峰网站建设价格临夏优秀网站设计多少钱张北百度关键词包年推广多少钱海东企业网站制作多少钱德宏网站推广系统价格吉安网站优化排名报价淮安SEO按天扣费推荐惠州设计网站推荐商丘优秀网站设计池州如何制作网站多少钱遂宁SEO按天收费推荐坑梓网络营销推荐苏州关键词按天收费多少钱西宁网站改版价格江门网页制作公司张北品牌网站设计昭通英文网站建设价格朔州网站制作保山百度关键词包年推广哪家好杭州SEO按效果付费哪家好云浮建网站报价安庆模板制作公司威海阿里店铺运营价格宜春网站seo优化报价黔西南百度seo推荐常州网站制作设计报价宜宾网络推广价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化