张量操作与线性回归

一、张量的操作:拼接、切分、索引和变换

(1)张量拼接与切分

1.1 torch.cat()

功能:将张量按维度dim进行拼接
• tensors: 张量序列
• dim : 要拼接的维度
torch.cat(tensors, dim=0, out=None)函数用于沿着指定维度dim将多个张量拼接在一起。它接受一个张量列表tensors作为输入,并返回一个拼接后的张量。参数dim指定了拼接的维度,默认为0。

flag = True
if flag:
    t = torch.ones((2, 3)) #创建一个形状为(2, 3)的全为1的张量t

    t_0 = torch.cat([t, t], dim=0) # 将张量t沿着dim=0的维度拼接两次,得到张量t_0
    t_1 = torch.cat([t, t, t], dim=1)# 将张量t沿着dim=1的维度拼接三次,得到张量t_1

    print("t_0:{} shape:{}\nt_1:{} shape:{}".format(t_0, t_0.shape, t_1, t_1.shape))
t_0:tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]]) shape:torch.Size([4, 3])
t_1:tensor([[1., 1., 1., 1., 1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1., 1., 1., 1., 1.]]) shape:torch.Size([2, 9])
  • format()用于将t_0、t_0.shape、t_1和t_1.shape的值插入到字符串中的占位符位置。具体来说,{}是占位符,format()方法将会将对应的值填充到这些占位符的位置。
  • 例如,“t_0:{} shape:{}\nt_1:{} shape:{}”.format(t_0, t_0.shape, t_1, t_1.shape)中的{}将会分别被t_0、t_0.shape、t_1和t_1.shape的值所替代。

1.2 torch.stack()

功能:在新创建的维度dim上进行拼接
• tensors:张量序列
• dim :要拼接的维度

torch.stack(tensors, dim=0, out=None)函数用于沿着指定维度dim将多个张量堆叠在一起。它接受一个张量列表tensors作为输入,并返回一个堆叠后的张量。参数dim指定了堆叠的维度,默认为0。

以下是示例代码:

import torch
# 示例张量
tensor1 = torch.tensor([1, 2, 3])
tensor2 = torch.tensor([4, 5, 6])
tensor3 = torch.tensor([7, 8, 9])
# 使用torch.cat()函数拼接张量
cat_result = torch.cat([tensor1, tensor2, tensor3], dim=0)
print("torch.cat()拼接结果:", cat_result)

# 使用torch.stack()函数堆叠张量
stack_result = torch.stack([tensor1, tensor2, tensor3], dim=0)
print("torch.stack()堆叠结果:", stack_result)

输出结果为:

torch.cat()拼接结果: tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
torch.stack()堆叠结果: tensor([[1, 2, 3],
       						  [4, 5, 6],
       						  [7, 8, 9]])

1.3 torch.chunk()

torch.chunk()是PyTorch中的一个函数,用于将张量沿着指定维度进行分块。
函数的参数包括:

  • input:要分块的输入张量。
  • chunks:要分成的块数。
  • dim(可选):指定要分块的维度,默认为0。
    函数返回一个元组,包含分块后的张量块。
    以下是一个示例代码:
import torch
x = torch.tensor([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9]])
chunks = torch.chunk(x, chunks=3, dim=0)
for chunk in chunks:
    print(chunk)

在上述代码中,我们创建了一个形状为(3, 3)的张量x。然后,我们使用torch.chunk()函数将x沿着dim=0的维度分成3块。
最后,我们使用for循环遍历每个分块,并打印出来。运行代码后,输出如下:

tensor([[1, 2, 3]])
tensor([[4, 5, 6]])
tensor([[7, 8, 9]])

可以看到,x被分成了3个块,每个块是一个形状为(1, 3)的张量。


1.4 torch.split()

torch.split()是PyTorch中的一个函数,用于将张量沿着指定维度进行切分。
函数的参数包括:

  • tensor:要切分的输入张量。
  • split_size_or_sections:切分的大小或切分的份数。当split_size_or_sections为整数时,表示每一份的长度;当split_size_or_sections为列表时,按照列表元素进行切分。
  • dim(可选):指定要切分的维度,默认为0。
    函数返回一个张量列表,包含切分后的张量。
    以下是一个示例代码:
import torch
x = torch.tensor([[1, 2, 3, 4, 5],
                  [6, 7, 8, 9, 10],
                  [11, 12, 13, 14, 15]])
splits = torch.split(x, split_size_or_sections=2, dim=1)
for split in splits:
    print(split)

在上述代码中,我们创建了一个形状为(3, 5)的张量x。然后,我们使用torch.split()函数将x沿着dim=1的维度切分为大小为2的块。
最后,我们使用for循环遍历每个切分块,并打印出来。运行代码后,输出如下:

tensor([[ 1,  2],
        [ 6,  7],
        [11, 12]])
tensor([[ 3,  4],
        [ 8,  9],
        [13, 14]])
tensor([[ 5],
        [10],
        [15]])

可以看到,x被切分成了3个块,每个块的大小为(3, 2)(3, 2)(3, 1)


(2)张量索引

2.1 torch.index_select()

torch.index_select()是PyTorch中的一个函数,用于按索引从输入张量中选择元素。
函数的参数包括:

  • input:输入张量。
  • dim:指定按哪个维度进行选择。
  • index:选择元素的索引。可以是一个张量或一个整数列表。
  • out(可选):输出张量,用于存储结果。
    函数返回一个新的张量,包含按索引选择的元素。
    以下是一个示例代码:
import torch

# 创建一个输入张量
import torch

# 创建一个输入张量
x = torch.tensor([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9]])

# 创建一个索引张量
indices = torch.tensor([0, 2])

# 使用 torch.index_select() 函数按索引从输入张量中选择元素
selected = torch.index_select(x, dim=0, index=indices)

# 打印选择的结果
print(selected)

在上述代码中,我们创建了一个形状为(3, 3)的张量x。然后,我们使用torch.index_select()函数从x中按dim=0的维度选择索引为[0, 2]的元素。
最后,我们打印出选择的结果。运行代码后,输出如下:

tensor([[1, 2, 3],
        [7, 8, 9]])

可以看到,选择的结果是一个形状为(2, 3)的张量,其中包含了x中索引为02的两行。

2.2 torch.masked_select()

功能:按mask中的True进行索引
返回值:一维张量
• input: 要索引的张量
• mask: 与input同形状的布尔类型张量

import torch
# 创建一个输入张量
input = torch.tensor([[1, 2, 3],
                      [4, 5, 6],
                      [7, 8, 9]])
# 创建一个掩码张量
mask = torch.tensor([[1, 0, 1],
                     [0, 1, 0],
                     [1, 0, 1]], dtype=torch.bool)
# 使用 torch.masked_select() 函数根据掩码从输入张量中选择元素
output = torch.masked_select(input, mask)
print(output)

这段代码使用了 torch.masked_select() 函数,它的作用是根据掩码 mask 从输入张量 input 中选择元素。
在代码中,我们首先创建了一个形状为 (3, 3) 的输入张量 input。然后,我们创建了一个与输入张量形状相同的掩码张量 mask,其中的元素为布尔类型,用来指示要选择的元素。
接下来,我们调用 torch.masked_select() 函数,传入输入张量 input 和掩码张量 mask。函数会根据掩码选择对应位置为 True 的元素,并返回一个新的张量。
最后,我们将选择的结果存储在输出张量 output 中,并打印出来。运行代码后,输出如下:

tensor([1, 3, 5, 7, 9])

可以看到,输出张量 output 包含了输入张量 input 中掩码为 True 的元素。

(3)张量变换

3.1 torch.reshape()

功能:变换张量形状
注意事项:当张量在内存中是连续时,新张量与input共享数据内存
• input: 要变换的张量
• shape: 新张量的形状

import torch
# 创建一个输入张量
input = torch.tensor([[1, 2, 3],
                      [4, 5, 6]])
# 使用 torch.reshape() 函数改变张量的形状
output = torch.reshape(input, (3, 2))
print(output)

这段代码使用了 torch.reshape() 函数,它的作用是改变张量的形状。
在代码中,我们首先创建了一个形状为 (2, 3) 的输入张量 input。然后,我们调用 torch.reshape() 函数,传入输入张量 input 和目标形状 (3, 2)
函数会将输入张量 input 改变为目标形状 (3, 2),并返回一个新的张量。
最后,我们将改变形状后的结果存储在输出张量 output 中,并打印出来。运行代码后,输出如下:

tensor([[1, 2],
        [3, 4],
        [5, 6]])

可以看到,输出张量 output 的形状已经被改变为 (3, 2),其中的元素顺序与输入张量 input 保持一致。

3.2 torch.transpose()

功能:交换张量的两个维度
• input: 要变换的张量
• dim0: 要交换的维度
• dim1: 要交换的维度

import torch
# 创建一个输入张量
input = torch.tensor([[1, 2, 3],
                      [4, 5, 6]])
# 使用 torch.transpose() 函数交换张量的维度
output = torch.transpose(input, 0, 1)
print(output)

这段代码使用了 torch.transpose() 函数,它的作用是交换张量的维度。
在代码中,我们首先创建了一个形状为 (2, 3) 的输入张量 input。然后,我们调用 torch.transpose() 函数,传入输入张量 input 和要交换的维度 dim0=0dim1=1
函数会将输入张量 input 的维度 0 和维度 1 进行交换,并返回一个新的张量。
最后,我们将交换维度后的结果存储在输出张量 output 中,并打印出来。运行代码后,输出如下:

tensor([[1, 4],
        [2, 5],
        [3, 6]])

可以看到,输出张量 output 的维度已经被交换,形状变为 (3, 2),其中的元素顺序与输入张量 input 保持一致。

3.3 torch.t()

功能:2维张量转置,对矩阵而言,等价于 torch.transpose(input, 0, 1)

import torch
# 创建一个输入张量
input = torch.tensor([[1, 2, 3],
                      [4, 5, 6]])
# 使用 torch.t() 函数转置张量
output = torch.t(input)
print(output)

这段代码使用了 torch.t() 函数,它的作用是对张量进行转置操作。
在代码中,我们首先创建了一个形状为 (2, 3) 的输入张量 input。然后,我们调用 torch.t() 函数,传入输入张量 input
函数会将输入张量 input 进行转置,并返回一个新的张量。
最后,我们将转置后的结果存储在输出张量 output 中,并打印出来。运行代码后,输出如下:

tensor([[1, 4],
        [2, 5],
        [3, 6]])

可以看到,输出张量 output 的维度已经被转置,形状变为 (3, 2),其中的元素顺序与输入张量 input 保持一致

3.4 torch.squeeze()

功能:压缩长度为1的维度(轴)
• dim: 若为None,移除所有长度为1的轴;若指定维度,当且仅当该轴长度为1时,可以被移除;

import torch
# 创建一个输入张量
input = torch.tensor([[[1, 2, 3],
                       [4, 5, 6]]])
# 使用 torch.squeeze() 函数去除张量的尺寸为 1 的维度
output = torch.squeeze(input)
print(output)

这段代码使用了 torch.squeeze() 函数,它的作用是去除张量中尺寸为 1 的维度。
在代码中,我们首先创建了一个形状为 (1, 2, 3) 的输入张量 input。然后,我们调用 torch.squeeze() 函数,传入输入张量 input
函数会去除输入张量 input 中尺寸为 1 的维度,并返回一个新的张量。
最后,我们将去除尺寸为 1 的维度后的结果存储在输出张量 output 中,并打印出来。运行代码后,输出如下:

tensor([[1, 2, 3],
        [4, 5, 6]])

可以看到,输出张量 output 的形状已经被修改,尺寸为 1 的维度被去除,变为 (2, 3)


3.5 torchunsqueeze()

功能:依据dim扩展维度
• dim: 扩展的维度

抱歉,我之前给出的回答有误。在PyTorch中没有 torch.usqueeze() 函数。正确的函数是 torch.unsqueeze(),它的作用是在指定的维度上增加一个大小为1的维度。
以下是使用 torch.unsqueeze() 函数的示例代码:

import torch
# 创建一个输入张量
input = torch.tensor([[1, 2, 3],
                      [4, 5, 6]])
# 使用 torch.unsqueeze() 函数在维度0上增加一个大小为1的维度
output = torch.unsqueeze(input, dim=0)
print(output)

在这个示例中,我们创建了一个形状为 (2, 3) 的输入张量 input。然后,我们调用 torch.unsqueeze() 函数,传入输入张量 input 和要增加维度的维度索引 dim=0
函数会在维度0上增加一个大小为1的维度,并返回一个新的张量。
最后,我们将增加维度后的结果存储在输出张量 output 中,并打印出来。运行代码后,输出如下:

tensor([[[1, 2, 3],
         [4, 5, 6]]])

可以看到,输出张量 output 的形状已经被修改,维度0上增加了一个大小为1的维度。

二、张量数学运算

一、加减乘除

  1. torch.add(input, other, alpha=1):将输入张量 input 和另一个张量 other 按元素相加,并返回结果张量。可选参数 alpha 控制相加的缩放因子。
    torch.add() 功能:逐元素计算 input+alpha×other
    • input: 第一个张量
    • alpha: 乘项因子
    • other: 第二个张量

torch.add(input, alpha=1, other, out=None) 是一个用于执行张量相加操作的函数。
参数说明:

  • input:输入张量。
  • alpha:一个可选的缩放因子,默认为1。它用于将 other 张量与 input 张量相乘后再相加。
  • other:另一个张量,与 input 张量进行相加操作。
  • out:可选的输出张量,用于存储结果。
    函数功能:
    该函数将输入张量 input 与另一个张量 other 进行按元素相加的操作,并返回结果张量。如果提供了 out 参数,结果将存储在 out 张量中;否则,将创建一个新的张量来存储结果。
    请注意,inputother 的形状必须是可广播的,否则会引发错误。广播机制允许在不同形状的张量之间执行按元素操作。
    示例用法:
import torch
input = torch.tensor([1, 2, 3])
other = torch.tensor([4, 5, 6])
result = torch.add(input, alpha=2, other=other)
print(result)  # 输出: tensor([9, 12, 15])

在这个示例中,input 张量为 [1, 2, 3]other 张量为 [4, 5, 6]alpha 参数为2。函数将 inputother 相乘得到 [2, 4, 6],然后再与 other 相加得到结果 [6, 9, 12]

  1. torch.addcdiv(input, tensor1, tensor2, value=1):将输入张量 input 与张量 tensor1 的按元素除法结果与张量 tensor2 相乘,然后加上一个标量值 value,并返回结果张量。

在这里插入图片描述

  1. torch.addcmul(input, tensor1, tensor2, value=1):将输入张量 input 与张量 tensor1 的按元素乘法结果与张量 tensor2 相加,然后加上一个标量值 value,并返回结果张量。
    在这里插入图片描述

torch.addcmul(input, value=1, tensor1, tensor2, out=None) 是一个执行逐元素乘法和加法操作的函数。
参数说明:

  • input:输入张量。
  • value:一个可选的缩放因子,默认为1。它用于将 tensor1tensor2 相乘后再与 input 相加。
  • tensor1:第一个张量,与 tensor2 相乘。
  • tensor2:第二个张量,与 tensor1 相乘。
  • out:可选的输出张量,用于存储结果。
    函数功能:
    该函数将输入张量 inputtensor1tensor2 进行逐元素相乘,并将结果与 input 相加。如果提供了 out 参数,结果将存储在 out 张量中;否则,将创建一个新的张量来存储结果。
    请注意,inputtensor1tensor2 的形状必须是可广播的,否则会引发错误。广播机制允许在不同形状的张量之间执行按元素操作。
    示例用法:
import torch
input = torch.tensor([1, 2, 3])
tensor1 = torch.tensor([4, 5, 6])
tensor2 = torch.tensor([2, 3, 4])
result = torch.addcmul(input, value=0.5, tensor1=tensor1, tensor2=tensor2)
print(result)  # 输出: tensor([5., 7.5, 10.])

在这个示例中,input 张量为 [1, 2, 3]tensor1 张量为 [4, 5, 6]tensor2 张量为 [2, 3, 4]value 参数为0.5。函数将 tensor1tensor2 逐元素相乘得到 [8, 15, 24],然后再与 input 相加得到结果 [9, 17, 27]

  1. torch.sub(input, other):将输入张量 input 和另一个张量 other 按元素相减,并返回结果张量。
  2. torch.div(input, other):将输入张量 input 和另一个张量 other 按元素相除,并返回结果张量。
  3. torch.mul(input, other):将输入张量 input 和另一个张量 other 按元素相乘,并返回结果张量。

二、对数,指数,幂函数

  1. torch.log(input, out=None):计算输入张量 input 的自然对数,并返回结果张量。
  2. torch.log10(input, out=None):计算输入张量 input 的以10为底的对数,并返回结果张量。
  3. torch.log2(input, out=None):计算输入张量 input 的以2为底的对数,并返回结果张量。
  4. torch.exp(input, out=None):计算输入张量 input 的指数函数,即 e^x,其中 e 是自然对数的底数,并返回结果张量。
  5. torch.pow(input, exponent, out=None):计算输入张量 input 的每个元素的指数幂,指数由参数 exponent 指定,并返回结果张量。

三、三角函数

  1. torch.abs(input, out=None):计算输入张量 input 的绝对值,并返回结果张量。
  2. torch.acos(input, out=None):计算输入张量 input 的反余弦值(弧度制),并返回结果张量。
  3. torch.cosh(input, out=None):计算输入张量 input 的双曲余弦值,并返回结果张量。
  4. torch.cos(input, out=None):计算输入张量 input 的余弦值(弧度制),并返回结果张量。
  5. torch.asin(input, out=None):计算输入张量 input 的反正弦值(弧度制),并返回结果张量。
  6. torch.atan(input, out=None):计算输入张量 input 的反正切值(弧度制),并返回结果张量。
  7. torch.atan2(input, other, out=None):计算输入张量 input 与另一个张量 other 的反正切值(弧度制),并返回结果张量。

三、线性回归

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import torch
import matplotlib.pyplot as plt

# 设置随机种子
torch.manual_seed(10)

# 学习率
lr = 0.05

# 创建训练数据
x = torch.rand(20, 1) * 10  # x data (tensor), shape=(20, 1)
y = 2*x + (5 + torch.randn(20, 1))  # y data (tensor), shape=(20, 1)

# 构建线性回归参数
w = torch.randn((1), requires_grad=True)  # 权重 w,随机初始化
b = torch.zeros((1), requires_grad=True)  # 偏置 b,初始化为零

# 迭代训练
for iteration in range(1000):

    # 前向传播
    wx = torch.mul(w, x)  # wx = w * x
    y_pred = torch.add(wx, b)  # y_pred = wx + b

    # 计算 MSE loss
    loss = (0.5 * (y - y_pred) ** 2).mean()

    # 反向传播
    loss.backward()

    # 更新参数
    b.data.sub_(lr * b.grad)  # 更新偏置 b
    w.data.sub_(lr * w.grad)  # 更新权重 w

    # 清零梯度
    w.grad.zero_()
    b.grad.zero_()

    # 绘图
    if iteration % 20 == 0:
        plt.cla()  # 清除当前图形
        plt.scatter(x.data.numpy(), y.data.numpy())  # 绘制训练数据的散点图
        plt.plot(x.data.numpy(), y_pred.data.numpy(), 'r-', lw=5)  # 绘制当前的拟合线
        plt.text(2, 20, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 20, 'color': 'red'})  # 显示当前的损失值
        plt.xlim(1.5, 10)
        plt.ylim(8, 28)
        plt.title("Iteration: {}\nw: {} b: {}".format(iteration, w.data.numpy(), b.data.numpy()))  # 显示当前的迭代次数和参数值
        plt.pause(0.5)

        if loss.data.numpy() < 1:
            break

plt.show()  # 显示图形

这段代码是一个简单的线性回归模型的训练过程,并且使用 matplotlib 库将训练过程可视化。

  • 代码首先导入了 torch 和 matplotlib.pyplot 库,并设置了随机种子。
  • 接下来,代码创建了训练数据,其中 x 是一个形状为 (20, 1) 的随机张量,y 是根据公式 2*x + (5 + 随机噪声) 生成的张量。
  • 然后,代码定义了线性回归模型的参数 w 和 b,它们都是需要梯度计算的张量。

在每次迭代中,代码进行了以下操作:

  1. 前向传播:根据当前的 w 和 b 计算预测值 y_pred。
  2. 计算均方误差(MSE)损失函数。
  3. 反向传播:根据损失函数计算梯度。
  4. 更新参数:使用学习率 lr 和梯度更新参数 w 和 b。
  5. 清零梯度:使用 w.grad.zero_() 和 b.grad.zero_() 清零参数的梯度。

每隔 20 次迭代,代码会绘制训练数据的散点图,并在图中绘制当前的拟合线。同时,代码还会显示当前的损失值和参数 w、b 的数值。如果损失值小于 1,代码会提前结束训练。最后,通过 plt.show() 显示图形。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/284455.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构模拟实现LinkedList双向不循环链表

目录 一、双向不循环链表的概念 二、链表的接口 三、链表的方法实现 &#xff08;1&#xff09;display方法 &#xff08;2&#xff09;size方法 &#xff08;3&#xff09;contains方法 &#xff08;4&#xff09;addFirst方法 &#xff08;5&#xff09;addLast方法 …

Java API 操作Docker浅谈

背景&#xff1a; 使用com.github.docker-java库可以很方便地在Java中操作Docker。下面是一个详细的教程&#xff0c;包括创建镜像、创建容器、启动容器、停止容器和删除容器的步骤以及每一步的说明。 前提&#xff1a; 首先&#xff0c;在你的Java项目中添加com.github.doc…

三、Mysql安全性操作[用户创建、权限分配]

一、用户 1.创建用户 CREATE USER test1localhost identified BY test1;2.删除用户 DROP USER test2localhost;二、权限分配 1.查询用户权限 SHOW GRANTS FOR test1localhost;2.分配权限 # 分配用户所有权限在for_end_test库的test1表 GRANT ALL PRIVILEGES ON for_end_t…

五分钟学完朴素贝叶斯算法

下面再描述一个详细的案例 个人感觉如下链接讲的比较详细 图解机器学习 | 朴素贝叶斯算法详解 - 知乎

2.3物理层下面的传输媒体

目录 2.3物理层下面的传输媒体2.3.1导引型传输媒体1.双绞线2.同轴电缆3.光纤 2.3.2非导引型传输媒体无线电微波通信 2.3物理层下面的传输媒体 传输媒体是数据传输系统中在发送器和接收器之间的物理通路 两大类&#xff1a; 导引型传输媒体&#xff1a;电磁波被导引沿着固体媒体…

新产品推广选品牌外包广州迅腾文化传播多渠道传播能力

在当今激烈的市场竞争中&#xff0c;新产品推广已成为企业发展的关键。选择具备多渠道传播能力的品牌外包服务提供商&#xff0c;有助于快速提升品牌知名度和市场占有率。作为行业领先者&#xff0c;迅腾文化凭借卓越的多渠道传播能力&#xff0c;成为企业新产品推广的理想合作…

国家开放大学形成性考核 统一考试 资料参考

试卷代号&#xff1a;11141 工程经济与管理 参考试题 一、单项选择题&#xff08;每题2分&#xff0c;共20分&#xff09; 1.资金的时间价值&#xff08; &#xff09;。 A.现在拥有的资金在将来投资时所能获得的利益 B.现在拥有的资金在将来消费时所付出的福利损失 C.…

saas 多租户系统数据隔离方案

关注WX公众号&#xff1a; commindtech77&#xff0c; 获得数据资产相关白皮书下载地址 1. 回复关键字&#xff1a;数据资源入表白皮书 下载 《2023数据资源入表白皮书》 2. 回复关键字&#xff1a;光大银行 下载 光大银行-《商业银行数据资产会计核算研究报告》 3. 回复关键字…

FreeRTOS学习第5篇--任务优先级

目录 FreeRTOS学习第5篇--任务优先级任务优先级设计实验任务一StartDefaultTask任务相关代码片段任务二ColorLED_Test任务相关代码片段任务三IRReceiver_Task相关代码片段实验现象本文中使用的测试工程 FreeRTOS学习第5篇–任务优先级 本文目标&#xff1a;学习与使用FreeRTOS…

关键字:throw关键字

在 Java 中&#xff0c;throw关键字用于抛出异常。当程序执行过程中发生意外情况&#xff0c;如错误的输入、资源不足、错误的逻辑等&#xff0c;导致程序无法正常执行下去时&#xff0c;可以使用throw关键字抛出异常。 以下是使用throw关键字的一些示例&#xff1a; 抛出异常…

C++程序编译

GCC编译器 文章目录 GCC编译器 源文件 为 Main.cpp 注意cpp文件 一定要用g命令 否则没办法执行 预处理&#xff08;Pre-Processing&#xff09;&#xff1a;首先会经过预处理器将程序中的预编译指令进行处理&#xff0c;然后把源文件中的注释这些没用的东西都给扬了。 g -E Mai…

[线代]不挂科猴博士

行列式的性质 行列式的计算及应用 矩阵的运算上(加减,相乘,取行列式) 矩阵的运算下(转置,逆,秩) 向量组与线性空间 解方程组

打不开的U盘还能恢复吗?U盘打不开恢复方法

U盘打不开是用户在使用过程中经常遇到的问题&#xff0c;通常是由于驱动器问题、文件系统损坏、U盘硬件故障等原因引起的。本文将详细分析这些原因&#xff0c;并提供相应的解决方法&#xff0c;帮助用户快速解决U盘打不开的问题。 当U盘打不开时&#xff0c;想要保留其中的文件…

学习使用wps将ppt的页面保存为图片的方法

学习使用wps将ppt的页面保存为图片的方法 方案 方案 1、打开ppt&#xff0c;点击文件&#xff0c;另存为&#xff0c;选择文件类型为图片格式&#xff0c;jpg或者png&#xff0c;如下图&#xff1a; 2、点击每张幻灯片

Codeforces Round 900 (Div. 3)(A-F)

比赛链接 : Dashboard - Codeforces Round 900 (Div. 3) - Codeforces A. How Much Does Daytona Cost? 题面 : 思路 : 在序列中只要找到k&#xff0c;就返回true ; 代码 : #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)…

将PPT4页并排成1页

将PPT4页并排成1页打印 解决方法: 方法一 在打印时选择&#xff1a; 打开 PPT&#xff0c;点击文件选项点击打印点击整页幻灯片点击4张水平放置的幻灯平页面就会显示4张PPT显示在一张纸上 方法二 另存为PDF&#xff1a; 打开电脑上的目标PPT文件&#xff0c;点击文件点击…

数据结构期末复习(fengkao课堂)

学习数据结构时&#xff0c;以下建议可能对您有所帮助&#xff1a; 理解基本概念&#xff1a;首先&#xff0c;确保您理解数据结构的基本概念&#xff0c;例如数组、链表、栈、队列、树、图等。了解它们的定义、特点和基本操作。 学习时间复杂度和空间复杂度&#xff1a;了解如…

深度学习中Batch/Layer/Instance/Group normalization方法

图片中&#xff0c;N是batch size&#xff0c; c是channel。 BN&#xff1a;在每一个channel内&#xff0c;对H&#xff0c;W&#xff0c;Batch做平均LN&#xff1a;在每一个batch内&#xff0c;对H&#xff0c;W&#xff0c;Channel做平均IN&#xff1a;在每一个channel和bat…

数据结构:队列(链表和数组模拟实现)

目录 1.何为队列 2.链表模拟实现 2.1 节点和队列创建 2.2 初始化队列 2.3 入队操作 2.4 出队操作 2.5 遍历队列 2.6 获取队首和队尾元素 2.7 判断队列是否为空 2.8 完整实现 3. 数组模拟实现 3.1 创建队列 3.2 入队和出队操作 3.3 遍历队列 3.4 获取队首和队尾元…

LLM应用的分块策略

每日推荐一篇专注于解决实际问题的外文&#xff0c;精准翻译并深入解读其要点&#xff0c;助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号 原文标题&#xff1a;Chunking Strategies for LLM Applications 原文地址&#xff1a;https://www.pinecone.io/learn/c…
最新文章