【深度学习】DNN Regression 代码实现与详解

2023-05-16

相关说明

  • 数据集分成两个文件,traintest。训练时,将train分为训练集和验证集,用于训练模型以及判断模型训练的好坏。
  • test数据集用于最终测试模型的通用性,即所训练出来的模型是否“过拟合”。

1.下载数据集

tr_path = 'covid.train.csv'  # 设置训练集数据存储的地址
tt_path = 'covid.test.csv'   # 设置测试集数据存储的地址

# !gdown为Google Colab所支持的特殊指令,用于下载存储在云盘中数据
!gdown --id '19CCyCgJrUxtvgZF53vnctJiOJ23T5mqF' --output covid.train.csv
!gdown --id '1CE240jLm2npU-tdz81-oVKEF3T2yfT1O' --output covid.test.csv

下载数据不方便的同学,用下面的链接下载即可。
链接:https://pan.baidu.com/s/1iBWYkSy-Jj8UwHYnSSS73w
提取码:amva

2.导入相关的包

# 导入后续需要使用到的相关包
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader

# 导入对数据集进行相关处理的包
import numpy as np
import csv
import os

# 导入绘制图像相关的包
import matplotlib.pyplot as plt
from matplotlib.pyplot import figure

# 设置一个随机种子,以保证程序的可重复性
# 相关知识:使用相同的随机数种子,能够保证每次实验所生成的随机数相同
myseed = 42069  
torch.backends.cudnn.deterministic = True	# 设置为True,保证每次训练使用的卷积算法一致
# 算法一致:算法运行在相同的软硬件的前提下,如果具有相同的输入,则输出相同
# Note:确定性算法往往比不确定性算法有更坏的性能表现

torch.backends.cudnn.benchmark = False		# 布尔值,为真将使cuDNN对多个卷积算法进行基准测试,并选择最快的算法。
# cuDNN 是英伟达专门为深度神经网络所开发出来的 GPU 加速库,针对卷积、池化等等常见操作做了非常多的底层优化
# 如果卷积网络结构不是动态变化的,网络的输入 (batch size,图像的大小,输入的通道) 是固定的,设置为True。由于本文并未涉及卷积运算,所以设置为False

# 设置numpy、torch、torch.cuda的随机数种子
np.random.seed(myseed)
torch.manual_seed(myseed)
if torch.cuda.is_available():
    torch.cuda.manual_seed_all(myseed)

3.定义基本函数

def get_device():
    ''' 判断GPU是否可用,可用则返回cuda,否则返回cpu'''
    return 'cuda' if torch.cuda.is_available() else 'cpu'

def plot_learning_curve(loss_record, title=''):
    ''' 训练结束后,用于绘制整个训练过程中Loss值的变化 '''
    total_steps = len(loss_record['train'])
    # 
    x_1 = range(total_steps)
    x_2 = x_1[::len(loss_record['train']) // len(loss_record['dev'])]
    figure(figsize=(6, 4))			                      # 设置图表的宽、高(以英尺为单位)
    plt.plot(x_1, loss_record['train'], c='tab:red', label='train')
    plt.plot(x_2, loss_record['dev'], c='tab:cyan', label='dev')
    plt.ylim(0.0, 5.)									  # 限制y轴大小为0~5
    plt.xlabel('Training steps')
    plt.ylabel('MSE loss')
    plt.title('Learning curve of {}'.format(title))
    plt.legend()										  # 使修改的label生效
    plt.show()


def plot_pred(dv_set, model, device, lim=35., preds=None, targets=None):
    ''' 绘制训练后的DNN网络的预测结果 '''
    if preds is None or targets is None:
        model.eval()									  # 设置模型围为测试模式
        preds, targets = [], []
        for x, y in dv_set:
            x, y = x.to(device), y.to(device)
            with torch.no_grad():						  # 关闭梯度计算,降低内存消耗,加快运行速度
                pred = model(x)                     
                preds.append(pred.detach().cpu())         # detach()运算:用于将Tensor从计算图中分离出来 cpu()运算:将Tensor数据传回CPU
                targets.append(y.detach().cpu())         
        preds = torch.cat(preds, dim=0).numpy()          # torch.cat():在给定维中(dim指定)连接给定序列的seq张量。所有张量必须具有相同的形状(连接维度中除外)或为空。
        targets = torch.cat(targets, dim=0).numpy()

    figure(figsize=(5, 5))
    # plt.scatter()用于绘制散点图
    plt.scatter(targets, preds, c='r', alpha=0.5)
    plt.plot([-0.2, lim], [-0.2, lim], c='b')
    plt.xlim(-0.2, lim)
    plt.ylim(-0.2, lim)
    plt.xlabel('ground truth value')
    plt.ylabel('predicted value')
    plt.title('Ground Truth v.s. Prediction')
    plt.show()

4.定义数据处理类

自定义数据集类必须实现三个函数: __init__()__len__()__getitem__()。本文在类COVID19Dataset有所体现。

  • __init__():本函数仅在实例化类时被调用一次。用于完成一些初始化的操作,如读取数据集的数据、分割数据集等。
  • __len__():调用该函数返回当前数据集中数据个数。
  • __getitem__(idx):返回当前数据集中对应idx的数据。对于训练集,返回样本和对应的标签;对于测试集,通常仅返回样本。
class COVID19Dataset(Dataset):
    ''' 用于加载和预处理COVID19 数据集的类'''
    def __init__(self,path,mode='train',target_only=False):
        self.mode = mode

        # 读取数据,保存格式为numpy数组
        with open(path, 'r') as fp:
            data = list(csv.reader(fp))
            data = np.array(data[1:])[:, 1:].astype(float)
        # target_only为默认值,则选取所有93个特征作为训练数据;
        if not target_only:
            feats = list(range(93))
        else:
            pass

        if mode == 'test':
            # 由于测试集不含有标签数据,故仅对data进行操作即可
            data = data[:, feats]
            self.data = torch.FloatTensor(data)
        else:
            # 针对训练集的操作
            # 读取的原始数据: 2700 x 94 (40 states + day 1 (18) + day 2 (18) + day 3 (18))
            # 处理后,data为2700 x 93,target为2700 x 1
            target = data[:, -1]
            data = data[:, feats]
            
            # 将训练集划分为训练集和验证集,此处按照:训练集:验证集=9:1 的比例进行
            if mode == 'train':
                indices = [i for i in range(len(data)) if i % 10 != 0]
            elif mode == 'dev':
                indices = [i for i in range(len(data)) if i % 10 == 0]
            
            # 将numpy array格式的数据均转化为torch.FloatTensor类型
            self.data = torch.FloatTensor(data[indices])
            self.target = torch.FloatTensor(target[indices])

        # 归一化特征;这种做法通常有利于提升模型训练的效果
        self.data[:, 40:] = \
            (self.data[:, 40:] - self.data[:, 40:].mean(dim=0, keepdim=True)) \
            / self.data[:, 40:].std(dim=0, keepdim=True)

        self.dim = self.data.shape[1]

        print('Finished reading the {} set of COVID19 Dataset ({} samples found, each dim = {})'
              .format(mode, len(self.data), self.dim))

    def __getitem__(self, index):
        # 根据传入的index值返回数据
        if self.mode in ['train', 'dev']:
            return self.data[index], self.target[index]
        else:
            return self.data[index]

    def __len__(self):
        # 返回数据集的长度(尺寸)
        return len(self.data)

5.定义数据加载器"DataLoader"

数据加载器的意义:前一步构造的数据集实现了每一次返回一个样本和对应的标签,但在训练模型时,我们希望一次给模型“喂”进去一批样本minibatches”,同时在每个epoch按照不同的次序导入数据shuffle 。上述做法能够起到降低模型过拟合,以及利用Python的批处理能力加速训练的目的。

DataLoader可作为迭代器使用。每次迭代返回由batch_size控制的数据规模。

def prep_dataloader(path, mode, batch_size, n_jobs=0, target_only=False):
    '''构造一个数据集,再将数据集传入数据加载器'''
    dataset = COVID19Dataset(path, mode=mode, target_only=target_only) 
    # num_workers(可选):用于数据加载的子进程数。0表示将在主进程中加载数据。(默认值:0)
    # pin_memory(可选) :如果为True,数据加载程序将在返回张量之前将张量复制到CUDA固定内存中。
    # drop_last(可选)  :如果数据集大小不能被批大小(batch_size)整除,则设置为True以删除最后一个不完整的批。如果为False,并且数据集的大小不能被批大小整除,则最后一批将更小。(默认值:False)
    dataloader = DataLoader(
        dataset, batch_size,
        shuffle=(mode == 'train'), drop_last=False,
        num_workers=n_jobs, pin_memory=True)                            # 构造数据加载器
    return dataloader

6.定义深度神经网络“DNN”

class NeuralNet(nn.Module):
    ''' 一个简单的深度神经网络(均由全连接层构成)'''
    # torch.nn名称空间提供了构建自己的神经网络所需的所有构建块。
    # PyTorch中的有关神经网络每个模块都是nn.module的子类。
    # 神经网络本身就是一个由其他模块(层)组成的模块。
    # 这种嵌套结构允许轻松构建和管理复杂的体系结构。
    def __init__(self, input_dim):
        # 每个继承nn.Module的子类都需要在forward()方法中实现对于输入数据的操作。
        super(NeuralNet, self).__init__()
        # Sequential是模块的有序容器。
        # 数据以定义的相同顺序通过所有模块。您可以使用顺序容器快速的组合一个网络。
        self.net = nn.Sequential(
            nn.Linear(input_dim, 64),
            nn.ReLU(),
            nn.Linear(64, 1)
        )

        # 定义损失函数
        # reduction(可选):指定要应用于输出的缩减:"none"|"mean"|"sum"
        	# "none":不应用缩减
        	# "mean":输出的总和将除以输出中的元素数
        	# "sum" : 将对输出进行求和。(默认值)
        self.criterion = nn.MSELoss(reduction='mean')

    def forward(self, x):
        ''' 定义前向传递函数'''
        # .squeeze() 返回一个删除输入张量中维度大小为1的张量
        return self.net(x).squeeze(1)

    def cal_loss(self, pred, target):
        ''' 定义损失计算函数 '''
        return self.criterion(pred, target)

7.定义训练函数

def train(tr_set, dv_set, model, config, device):
    '''训练 DNN '''
    n_epochs = config['n_epochs']  # 设置最大的训练轮次
    # 设置优化器
    optimizer = getattr(torch.optim, config['optimizer'])(
        model.parameters(), **config['optim_hparas'])
    min_mse = 1000.
    loss_record = {'train': [], 'dev': []}      # 记录训练过程中的损失值
    early_stop_cnt = 0
    epoch = 0
    while epoch < n_epochs:
        model.train()                           # 将模型设置为训练模式
        for x, y in tr_set:                     # 开始迭代数据加载器
            optimizer.zero_grad()               # 设置梯度值为0
            x, y = x.to(device), y.to(device)   # 将数据转移到device中,加速运算
            pred = model(x)                     # 前向传播
            mse_loss = model.cal_loss(pred, y)  # 计算损失
            mse_loss.backward()                 # 启动反向传播,计算梯度
            optimizer.step()                    # 利用计算出来的梯度,更新参数
            loss_record['train'].append(mse_loss.detach().cpu().item())

        # 在完成一个epoch的训练后,在验证集上测试模型的效果
        dev_mse = dev(dv_set, model, device)
        if dev_mse < min_mse:
            # 若在验证集上得到更好的效果,则及时保存模型的参数
            min_mse = dev_mse
            print('Saving model (epoch = {:4d}, loss = {:.4f})'
                .format(epoch + 1, min_mse))
            torch.save(model.state_dict(), config['save_path'])  
            early_stop_cnt = 0
        else:
            early_stop_cnt += 1							# 统计模型效果连续不变好的次数

        epoch += 1
        loss_record['dev'].append(dev_mse)
        if early_stop_cnt > config['early_stop']:
            # 如果模型连续不变好的次数大于预设值,则停止训练
            # 这往往代表模型已经不能够训练得到更好的结果,及时停止训练是一个较好的策略
            break

    print('Finished training after {} epochs'.format(epoch))
    return min_mse, loss_record

8.定义验证函数

def dev(dv_set, model, device):
    model.eval()                                # 设置模型为测试模式
    total_loss = 0
    for x, y in dv_set:                         
        x, y = x.to(device), y.to(device)       
        with torch.no_grad():                   # 取消梯度计算(加快运行速度)
            pred = model(x)                     # 前向计算
            mse_loss = model.cal_loss(pred, y)  # 计算损失
        total_loss += mse_loss.detach().cpu().item() * len(x)  # 累加损失值
    total_loss = total_loss / len(dv_set.dataset)              # 计算平均的损失值

    return total_loss

9.定义测试函数

def test(tt_set, model, device):
    model.eval()                                
    preds = []
    for x in tt_set:                            
        x = x.to(device)                        
        with torch.no_grad():                   
            pred = model(x)                     
            preds.append(pred.detach().cpu())   # 记录每一批数据的预测值
    preds = torch.cat(preds, dim=0).numpy()     # 融合每一批数据的预测值,并将其转化为numpy数据
    return preds

10.配置超参数“hyperparameters”

device = get_device()                 # 检验当前的硬件环境(CPU/GPU)
os.makedirs('models', exist_ok=True)  # 创建存储模型的文件夹
target_only = False                   # 使用默认的特征(在本文中,即使用全部93个特征)

config = {
    'n_epochs': 3000,                # 设置最大的训练批次
    'batch_size': 270,               # 设置数据加载器的batch_size,即每次迭代返回的数据数量
    'optimizer': 'SGD',              # 优化算法(optimizer in torch.optim)
    'optim_hparas': {                # 优化器的超参数设置 (具体取决于你所调用的优化器)
        'lr': 0.001,                 # SGD算法的学习率
        'momentum': 0.9              # SGD算法的momentum
    },
    'early_stop': 200,               # 提前结束批次(距离你模型性能上一次提升的批次数)
    'save_path': 'models/model.pth'  # 模型保存路径
}

11.创建数据加载器

tr_set = prep_dataloader(tr_path, 'train', config['batch_size'], target_only=target_only)
dv_set = prep_dataloader(tr_path, 'dev', config['batch_size'], target_only=target_only)
tt_set = prep_dataloader(tt_path, 'test', config['batch_size'], target_only=target_only)

12.创建DNN

model = NeuralNet(tr_set.dataset.dim).to(device)  # 构造DNN,并导入GPU

13.调用训练函数,开始训练

model_loss, model_loss_record = train(tr_set, dv_set, model, config, device)

14.绘制学习图

plot_learning_curve(model_loss_record, title='deep model')

15.保存模型、验证模型

del model
model = NeuralNet(tr_set.dataset.dim).to(device)
ckpt = torch.load(config['save_path'], map_location='cpu')  # 载入先前保存的模型参数
model.load_state_dict(ckpt)
plot_pred(dv_set, model, device)  

16.保存结果

def save_pred(preds, file):
    ''' Save predictions to specified file '''
    print('Saving results to {}'.format(file))
    with open(file, 'w') as fp:
        writer = csv.writer(fp)
        writer.writerow(['id', 'tested_positive'])
        for i, p in enumerate(preds):
            writer.writerow([i, p])

preds = test(tt_set, model, device)  # 预测测试集的结果
save_pred(preds, 'pred.csv')         # 保存预测结果到 pred.csv

16.参考文档

  • 知乎:torch.backends.cudnn.benchmark ?!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【深度学习】DNN Regression 代码实现与详解 的相关文章

  • R:plm——年度固定效应——年度和季度数据

    我在设置面板数据模型时遇到问题 这是一些示例数据 library plm id lt c 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 year lt c 1999 1999 1999 1999 2000 2000 200
  • 用通俗易懂的方式讲解:内容讲解+代码案例,轻松掌握大模型应用框架 LangChain

    本文介绍了 LangChain 框架 它能够将大型语言模型与其他计算或知识来源相结合 从而实现功能更加强大的应用 接着 对LangChain的关键概念进行了详细说明 并基于该框架进行了一些案例尝试 旨在帮助读者更轻松地理解 LangChai
  • 如何快速申请GPT账号?

    详情点击链接 如何快速申请GPT账号 一OpenAI 1 最新大模型GPT 4 Turbo 2 最新发布的高级数据分析 AI画图 图像识别 文档API 3 GPT Store 4 从0到1创建自己的GPT应用 5 模型Gemini以及大模型
  • 用通俗易懂的方式讲解:使用 LlamaIndex 和 Eleasticsearch 进行大模型 RAG 检索增强生成

    检索增强生成 Retrieval Augmented Generation RAG 是一种结合了检索 Retrieval 和生成 Generation 的技术 它有效地解决了大语言模型 LLM 的一些问题 比如幻觉 知识限制等 随着 RAG
  • 带有管道和 GridSearchCV 的 StandardScaler

    我已将 standardScaler 放在管道上 并且 CV mlpregressor predict x test 的结果很奇怪 我想我必须从 standardScaler 取回这些值 但仍然不知道如何做 pipe MLPRegresso
  • chol.default(K) 中出现错误:5 阶前导小数对于 betareg 不是正定的

    我正在尝试适应一个beta regression模型使用betareg function of the betareg package对这些数据 df lt data frame category c c1 c1 c1 c1 c1 c1 c
  • 回归分析中的分类特征数据和序数特征数据差异?

    在进行回归分析时 我试图完全理解分类数据和序数数据之间的差异 目前 已经明确的是 分类特征和数据示例 颜色 红 白 黑为什么分类 red lt white lt black逻辑上是不正确 序数特征和数据示例 状况 旧的 翻新的 新的为什么序
  • 如何在javascript中找到多元回归方程

    我搜索了堆栈溢出 但没有找到任何与我的问题真正相同的问题 因为没有一个问题真正具有多个自变量 基本上我有一组数据点 我希望能够找到这些数据点的回归方程 到目前为止 我的代码如下所示 w x z 是自变量 y 是因变量 var dataPoi
  • 使用分类数据作为 sklearn Logistic 回归中的特征

    我试图了解如何使用分类数据作为特征sklearn linear model s LogisticRegression 我当然知道我需要对其进行编码 我不明白的是如何将编码特征传递给逻辑回归 以便将其作为分类特征进行处理 而不是将其在编码为标
  • 使用 mlogit R 函数时出错:两个索引没有定义唯一的观察结果

    我的 R 中的 logit 函数有问题 我的数据集如下所示 personID caseID altID choice a1 a2 a3 a4 1 1 1 1 3 0 3 1 1 1 2 0 1 3 0 1 1 1 3 0 4 4 4 4 1
  • 寻找返回黑盒模型最大输出的最佳输入组合

    在我的工作中将人工神经网络应用于回归任务时 我面临的挑战之一是 为了找到给定输入范围的最佳结果 我必须将多维网格输入到我的模型中 然后简单地选择最高的价值 然而 这总体上是一个计算成本非常高的解决方案 下面的文字长度可能会令人恐惧 但这只是
  • R 中具有二进制因变量的面板数据

    是否可以使用带有二元因变量的面板数据集在 R 中进行回归 我熟悉使用 glm 表示 logit 和 probit 以及使用 plm 表示面板数据 但不知道如何将两者结合起来 有现成的代码示例吗 EDIT 如果我能弄清楚如何提取 plm 在进
  • “poly()”如何生成正交多项式?如何理解返回的“coefs”?

    我对正交多项式的理解是它们采用以下形式 y x a1 a2 x c1 a3 x c2 x c3 a4 x c4 x c5 x c6 最多达到所需的术语数 where a1 a2 etc是每个正交项的系数 拟合之间有所不同 并且c1 c2 e
  • R Shiny:渲染summary.ivreg输出

    我正在尝试在 R Shiny 中呈现工具变量回归摘要 这是代码 iv ivreg lwage educ exper nearc4 exper summary iv 当我使用 renderTable 时 出现以下错误 没有适用于 xtable
  • c# LOESS/LOWESS 回归 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您知道执行 LOESS LOWESS 回归的 net 库吗 最好是免费 开源 端口来自java htt
  • 没有预测器的 Sklearn 回归

    是否可以在 sklearn 中使用或不使用 即仅使用截距 预测器来运行回归 例如逻辑回归 这似乎是一个相当标准的类型分析 也许这些信息已经在输出中可用 我发现的唯一相关的事情是sklearn svm l1 min c但这会返回一个非空模型
  • B 样条线混淆

    我意识到这个板上有关于 B 样条主题的帖子 但这些帖子实际上让我更加困惑 所以我想有人可能能够帮助我 我有 x 值范围从 0 到 1 的模拟数据 我想用三次样条拟合我的数据 degree 3 结为 0 0 1 0 2 0 9 1 我还想使用
  • R 中已知固定截距的线性回归

    我想使用 R 中的 lm 函数计算线性回归 此外 我想获得回归的斜率 其中我明确给出截距lm 我在互联网上找到了一个例子 我尝试阅读 R help lm 不幸的是我无法理解它 但我没有成功 谁能告诉我我的错误在哪里 lin lt data
  • 计算 scikit-learn 逻辑回归模型的残差偏差

    有没有办法计算残差scikit learn 逻辑回归模型 http scikit learn org stable modules generated sklearn linear model LogisticRegression html
  • 回归时如何设置系数值;右

    我正在寻找一种指定预测变量值的方法 当我使用当前数据运行 glm 时 其中一个变量的系数接近 1 我想将其设置为 0 8 我知道这会给我一个较低的 R 2 值 但我先验地知道模型的预测能力会更大 glm 的权重组件看起来很有希望 但我还没有

随机推荐

  • FreeRTOS 信号量

    64 嵌入式 简述二进制信号量 二进制信号量使用二进制信号量实现 创建信号量获取信号量释放信号量 中断中释放任务中释放 计数信号量互斥锁 创建互斥信号量拿锁放锁 递归互斥锁 获取递归信号量释放递归信号量 参考 FreeRtos 简述 Fre
  • 【转存】SpringBoot 中的自带工具类,快速提升开发效率

    断言 断言是一个逻辑判断 xff0c 用于检查不应该发生的情况 Assert 关键字在 JDK1 4 中引入 xff0c 可通过 JVM 参数 enableassertions开启 SpringBoot 中提供了 Assert 断言工具类
  • Mybatis-plus BindingException问题

    原因 xff1a 找不到 mapper xml 问题 解决方法 xff1a 去掉引用 mybatis plus lt dependency gt lt groupId gt com baomidou lt groupId gt lt art
  • 年度成果发布 | 百度超级链精选案例集正式上线!

    关注百度超级链微信公众号回复 案例集 获得电子版精选案例集 近年 xff0c 随着数字经济的发展 xff0c 区块链作为新基建的潜力逐渐被挖掘 xff0c 极大地发挥出其公开透明 高效便捷 互联互通的优势 xff0c 正在逐步提升社会信息交
  • Linux之Ubuntu入门篇[笔记自用]

    CMD 一 linux常用命令 lscd 点表示当前目录 点点当前目录的上一级目录 当前用户目录 放回上一次目录 pwduname 用于显示系统信息clear 清屏catsudo 以管理员运行cp 文件拷贝su 切换用户 sudo su x
  • Mysql 主从同步状态检查

    show slave status G 参数详解 1 Slave IO State SHOW PROCESSLIST输出的State字段的拷贝 Master User 被用于连接主服务器的当前用户 Master Port 当前的主服务器接口
  • maven打包报错 Expected root element project but found html

    Expected root element 39 project 39 but found 39 html 39 XXX spring boot parent 2 1 6 RELEASE pom 原因是POM文件错误 看下仓库中具体报错的p
  • BGP、OSPF、MPLS路由协议RFC分享

    文章目录 1 概述1 1 BGP1 2 OSPF1 3 MPLS 2 分享2 1 rfc 42712 2 rfc 31072 3 rfc 43642 4 rfc 44562 5 rfc 45772 6 rfc 47242 7 rfc 476
  • 单片机底层硬件与应用程序的联系

    1 单片机使用下载的固件库 xff0c 即底层驱动程序 2 功能配置寄存器是直接与硬件相互联系的 xff0c 例如汇编语言便可直接操纵功能配置寄存器
  • ROS中TF变换详解

    ROS发布TF变换 提示 xff1a 在ROS中发布TF变换时 xff0c 所使用的的角度为弧度而不是度 本文可以验证 xff0c 有错误欢迎各位评论指出 文章目录 ROS发布TF变换 前言1 Python实现TF发布2 C 43 43 实
  • 小狼毫输入法皮肤配置【自带皮肤配置】

    小狼毫输入法皮肤 小狼毫自带皮肤预览图小狼毫皮肤配置注释小狼毫自带的皮肤和配置 取自小狼毫程序文件夹 小狼毫自带皮肤预览图 安装位置 Rime weasel 0 14 3 data preview 小狼毫皮肤配置注释 span class
  • 119. Pascal's Triangle II

    Given a non negative index k where k 33 return the kth index row of the Pascal 39 s triangle Note that the row index sta
  • 【新手把新手,易学】esp8266指令进行测试

    Csdn的写博客的工具简直太难受了 xff0c 写在了world里边复制粘贴不过来 xff0c 图片不显示 xff0c 格式全丢失 xff0c 把测试分块发出来把 我也是新手按照新手帖子一步步实验的 xff0c 并做了一些补充 STA 类似
  • 百度超级链2021年终盘点:深度赋能数字经济,促进产业融通发展

    区块链是具有巨大潜力的战略技术 2021年 xff0c 国家 十四五 发展规划纲要将区块链列入七大数字经济重点产业之一 工信部 中央网信办联合印发推动区块链技术应用和产业发展的指导意见 xff0c 推动区块链技术加速落地 百度超级链秉承 让
  • 访问 www.taobao.com过程

    首先是查找浏览器缓存 xff0c 浏览器会保存一段时间你之前访问过的一些网址的DNS信息 xff0c 不同浏览器保存的时常不等 如果没有找到对应的记录 xff0c 这个时候浏览器会尝试调用系统缓存 来继续查找这个网址的对应DNS信息 如果还
  • PyTorch安装通用教程——附安装包

    安装PyTorch 通用教程 由于最近做项目需要使用PyTorch xff0c 所以便准备在网上查找相关教程和下载安装包 但由于官网提供的下载方式下载慢 xff08 至少我是如此 xff09 xff0c 以及在网上寻找百度云资源无果 由于曾
  • 树莓派4B 安装系统 实现WIFI联网 设置静态IP(无键鼠和显示器)

    本文结构 没有连接显示屏 键盘 鼠标 前期准备下载系统镜像并解压至存储卡实现利用网线访问树莓派系统连接WIFI设置静态IP 前期准备 文章比较长 xff0c 因为比较全面 树莓派4B网线一根已连接无线网的笔记本电脑存储卡 xff08 不低于
  • 【树莓派】作为服务器,实现外网访问

    我的个人博客目前由树莓派提供服务 本文首发于我的个人博客 xff1a xiebin tech 内容重点参考自 科技爱好者博客 前期准备 如果你只有一块新买的树莓派 xff0c 可以看树莓派4B 安装系统 实现WIFI联网 设置静态IP先安装
  • 【2021年8月】解决 rosdep update超时问题

    修改两个文件即可快速解决超时问题 1 修改 etc ros rosdep sources list d 20 default list 执行sudo gedit etc ros rosdep sources list d 20 defaul
  • 【深度学习】DNN Regression 代码实现与详解

    相关说明 数据集分成两个文件 xff0c train和test 训练时 xff0c 将train分为训练集和验证集 xff0c 用于训练模型以及判断模型训练的好坏 test数据集用于最终测试模型的通用性 xff0c 即所训练出来的模型是否