当前位置: 首页 > news >正文

深度学习神经网络基础知识(二)权重衰减、暂退法(Dropout)

专栏:神经网络复现目录

深度学习神经网络基础知识(二)

本文讲述神经网络基础知识,具体细节讲述前向传播,反向传播和计算图,同时讲解神经网络优化方法:权重衰减,Dropout等方法,最后进行Kaggle实战,具体用一个预测房价的例子使用上述方法。

文章部分文字和代码来自《动手学深度学习》


文章目录

  • 深度学习神经网络基础知识(二)
    • 范数
    • 权重衰减
      • 定义
      • 权重衰减的从零实现
      • 运行结果
      • 权重衰减的简洁实现
    • 暂退法(Dropout)
      • 定义
      • 暂退法的从零实现
      • 运行结果
      • 暂退法的简洁实现


范数

LpL_pLp范数是一种向量范数,定义如下:

∣x∣p=(∣x1∣p+∣x2∣p+⋯+∣xn∣p)1p\left|\boldsymbol{x}\right|{p}=\left(\left|x{1}\right|^{p}+\left|x_{2}\right|^{p}+\cdots+\left|x_{n}\right|^{p}\right)^{\frac{1}{p}}xp=(x1p+x2p++xnp)p1

其中,p≥1p \geq 1p1x=(x1,x2,⋯,xn)\boldsymbol{x}=(x_1, x_2, \cdots, x_n)x=(x1,x2,,xn) 是一个 nnn 维向量。当 p=2p=2p=2 时,LpL_pLp范数也称为欧几里得范数(Euclidean norm),常用于表达向量的长度或者大小。当 p=1p=1p=1 时,LpL_pLp范数也称为曼哈顿范数(Manhattan norm)或者 ℓ1\ell_11范数,常用于表达向量中各个元素的绝对值之和。当 p→∞p \rightarrow \inftyp 时,LpL_pLp范数也称为切比雪夫范数(Chebyshev norm)或者 ℓ∞\ell_\infty 范数,常用于表达向量中绝对值最大的元素。

L0L_0L0范数不是向量范数,因为它并不满足向量范数的三个条件之一,即正定性。通常把向量 x\boldsymbol{x}x 中非零元素的个数称为 x\boldsymbol{x}xL0L_0L0 范数,但这并不是一个数学上合理的定义。

常见的范数有以下几种:

L1L^1L1 范数:∣∣x∣∣1=∑i=1n∣xi∣||x||1 = \sum{i=1}^n |x_i|∣∣x∣∣1=i=1nxi

L2L^2L2 范数:∣∣x∣∣2=∑i=1nxi2||x||2 = \sqrt{\sum{i=1}^n x_i^2}∣∣x∣∣2=i=1nxi2

权重衰减

定义

权重衰减是一种用于降低过拟合的正则化技术。其原理是通过在模型训练过程中增加一个惩罚项(也称作正则化项),来抑制模型的复杂度,从而达到减小过拟合的效果。

具体来说,在损失函数中添加一个正则化项,一般会对模型的参数进行L2L_2L2范数的约束,也就是让模型的参数尽量小。这样,在模型训练过程中,不仅会尽量减小训练数据的损失,还会尽量让模型参数的平方和小,从而达到抑制模型过拟合的效果。

权重衰减的损失函数为:
在这里插入图片描述
其中 L(w,b)\mathcal{L}(\boldsymbol{w}, b)L(w,b) 是原始的无正则化项的损失函数,∣w∣2|\boldsymbol{w}|^2w2 表示模型参数的L2L_2L2范数,λ\lambdaλ 是正则化强度,nnn 是训练样本数。

在优化算法中,我们需要对这个损失函数进行梯度下降。由于正则化项的梯度为 λnw\frac{\lambda}{n}\boldsymbol{w}nλw,因此我们需要对原始的梯度加上这个正则化项的梯度:

w←(1−ηλ∣B∣)w−η∣B∣∑i∈B∂∂wl(i)(w,b)w \leftarrow (1 - \frac{\eta \lambda}{|B|})w - \frac{\eta}{|B|} \sum_{i \in B} \frac{\partial}{\partial w} l^{(i)}(w, b) w(1Bηλ)wBηiBwl(i)(w,b)

其中,www是待更新的权重参数,η\etaη是学习率,λ\lambdaλ是正则化超参数(即权重衰减超参数),∣B∣|B|B是当前小批量中的样本数,l(i)(w,b)l^{(i)}(w, b)l(i)(w,b)是第iii个样本的损失函数,∂∂wl(i)(w,b)\frac{\partial}{\partial w} l^{(i)}(w, b)wl(i)(w,b)是对权重参数的损失函数梯度。

权重衰减的从零实现

构造生成数据集的函数

%matplotlib inline
import torch
from torch import nn
from d2l import torch as d2l
#生成数据集
def synthetic_data(w,b,num):#x通过正态分布生成x=torch.normal(0,1,(num,len(w)))y=torch.matmul(x,w)+b#数据集中加入噪声y+=torch.normal(0,0.01,y.shape)return x,y.reshape(-1,1)

构造一个数据迭代器

def load_array(data_arrays, batch_size, is_train=True):  #@save"""构造一个PyTorch数据迭代器"""dataset = data.TensorDataset(*data_arrays)return data.DataLoader(dataset, batch_size, shuffle=is_train)

生成数据集

n_train, n_test, num_inputs, batch_size = 20, 100, 200, 5
true_w, true_b = torch.ones((num_inputs, 1)) * 0.01, 0.05
train_data = synthetic_data(true_w, true_b, n_train)
train_iter = load_array(train_data, batch_size)
test_data = synthetic_data(true_w, true_b, n_test)
test_iter = load_array(test_data, batch_size, is_train=False)

初始化模型参数

def init_params():w = torch.normal(0, 1, size=(num_inputs, 1), requires_grad=True)b = torch.zeros(1, requires_grad=True)return [w, b]

定义L2范数惩罚

def l2_penalty(w):return torch.sum(w.pow(2)) / 2

训练

def train(lambd):w, b = init_params()net, loss = lambda X: d2l.linreg(X, w, b), d2l.squared_lossnum_epochs, lr = 100, 0.003animator = d2l.Animator(xlabel='epochs', ylabel='loss', yscale='log',xlim=[5, num_epochs], legend=['train', 'test'])for epoch in range(num_epochs):for X, y in train_iter:# 增加了L2范数惩罚项,# 广播机制使l2_penalty(w)成为一个长度为batch_size的向量l = loss(net(X), y) + lambd * l2_penalty(w)l.sum().backward()d2l.sgd([w, b], lr, batch_size)if (epoch + 1) % 5 == 0:animator.add(epoch + 1, (d2l.evaluate_loss(net, train_iter, loss),d2l.evaluate_loss(net, test_iter, loss)))print('w的L2范数是:', torch.norm(w).item())

运行结果

未使用权重衰减
在这里插入图片描述
使用权重衰减
在这里插入图片描述

权重衰减的简洁实现

def train_concise(weight_decay):net = nn.Sequential(nn.Linear(num_inputs, 1))for param in net.parameters():param.data.normal_()loss = nn.MSELoss(reduction='none')num_epochs, lr = 100, 0.003# 偏置参数没有衰减trainer  = optim.SGD(model.parameters(), lr=lr, weight_decay=weight_decay)animator = d2l.Animator(xlabel='epochs', ylabel='loss', yscale='log',xlim=[5, num_epochs], legend=['train', 'test'])for epoch in range(num_epochs):for X, y in train_iter:trainer.zero_grad()l = loss(net(X), y)l.mean().backward()trainer.step()if (epoch + 1) % 5 == 0:animator.add(epoch + 1,(d2l.evaluate_loss(net, train_iter, loss),d2l.evaluate_loss(net, test_iter, loss)))print('w的L2范数:', net[0].weight.norm().item())

关注这行代码

trainer  = optim.SGD(model.parameters(), lr=lr, weight_decay=weight_decay)

其中weight_decay参数即为lambda

暂退法(Dropout)

定义

Dropout是一种用于神经网络的正则化技术,旨在减少模型的过拟合。该算法的核心思想是在网络的训练过程中随机“丢弃”一部分神经元,从而强制模型学习更加鲁棒和通用的特征。在测试时,所有神经元都保留,但是输出值需要乘以一个固定比例以保持期望输出不变。

具体来说,假设我们有一个包含LLL个层的神经网络。对于第iii层,它的输出为h(i)h^{(i)}h(i)。在训练时,我们按照一定的概率ppp来随机选择一部分神经元,将它们的输出值设置为0。因此,第iii层的输出为:

h~(i)=r(i)⊙h(i)\tilde{h}^{(i)}=r^{(i)}\odot h^{(i)}h~(i)=r(i)h(i)

其中r(i)r^{(i)}r(i)是一个与h(i)h^{(i)}h(i)具有相同形状的二进制向量,其中元素值为1的概率为ppp,值为0的概率为1−p1-p1p⊙\odot表示按元素相乘。在前向传播过程中,我们使用h~(i)\tilde{h}^{(i)}h~(i)代替h(i)h^{(i)}h(i)进行计算。在反向传播过程中,由于某些神经元的输出被设置为0,我们只需要将其对应的梯度清零即可。

在测试时,我们需要保留所有神经元的输出,但是为了保持期望输出不变,我们需要将所有神经元的输出值乘以ppp,即:

htest(i)=p⋅h(i)h^{(i)}_{test}=p\cdot h^{(i)}htest(i)=ph(i)

下图形象的展示了暂退法的效果:
在这里插入图片描述

暂退法的从零实现

这是一个实现dropout算法的函数,它接受一个输入张量X和一个dropout概率dropout,然后返回一个应用了dropout的输出张量。

具体来说,该函数会生成一个与X形状相同的掩码张量,其中每个元素都是随机生成的0或1,生成方式是根据概率dropout与0比较,如果大于dropout则为1,否则为0。然后将掩码张量与X相乘并除以(1 - dropout),这个操作相当于将保留下来的元素值除以它们的概率。最后返回应用了dropout的输出张量。

import torch
from torch import nn
from d2l import torch as d2ldef dropout_layer(X, dropout):assert 0 <= dropout <= 1# 在本情况中,所有元素都被丢弃if dropout == 1:return torch.zeros_like(X)# 在本情况中,所有元素都被保留if dropout == 0:return Xmask = (torch.rand(X.shape) > dropout).float()return mask * X / (1.0 - dropout)

具体关注一下:

mask = (torch.rand(X.shape) > dropout).float()

这一行代码的作用是生成一个与X形状相同的张量mask,并且其中的每个元素都是0或1。这里的0和1表示相应的X元素是否被保留,而生成这些0和1的方式是随机的,因为我们用torch.rand()函数生成一个形状与X相同的随机张量,并将其中的每个元素与dropout做比较。

比较的结果是一个布尔类型的张量,即对于X中的每个元素,如果随机生成的相应元素的值大于dropout,那么在mask中相应位置的值为1,表示保留;反之,如果随机生成的值小于等于dropout,那么在mask中相应位置的值为0,表示丢弃。

最后,为了保持期望的值不变,我们将所有保留的元素的值除以 1- dropout,这是因为被保留的概率是1- dropout。所以,最终得到的输出是一个X的掩码版本,其中的一些元素被随机置为零。

测试一下我们写的dropout层

X= torch.arange(16, dtype = torch.float32).reshape((2, 8))
print(X)
print(dropout_layer(X, 0.))
print(dropout_layer(X, 0.5))
print(dropout_layer(X, 1.))

定义模型参数

num_inputs, num_outputs, num_hiddens1, num_hiddens2 = 784, 10, 256, 256

定义模型
这次我们使用了和以往不同、面向对象的模型定义方式,需要重写__init__和forward函数

init 方法用于定义网络结构,包括网络层、激活函数、损失函数等,并初始化权重、偏差等参数。这些网络参数在训练过程中会不断地更新。

forward 方法用于定义数据在网络中的正向传播(也就是模型从输入到输出的计算过程),即输入数据经过网络的各层计算,最终得到输出。在该方法中,我们可以任意组合各种网络层及其参数,实现自己所需要的网络结构和计算过程。

在下面的代码中,Net 类继承自 nn.Module,其中 init 方法用于定义网络的结构,包括三个全连接层和一个 ReLU 激活函数。forward 方法用于实现数据在网络中的正向传播计算,包括将输入 X 经过全连接层和激活函数得到输出 out。在训练模式中,还会在第一个全连接层和第二个全连接层后面添加 dropout 层。

dropout1, dropout2 = 0.2, 0.5class Net(nn.Module):def __init__(self, num_inputs, num_outputs, num_hiddens1, num_hiddens2,is_training = True):super(Net, self).__init__()self.num_inputs = num_inputsself.training = is_trainingself.lin1 = nn.Linear(num_inputs, num_hiddens1)self.lin2 = nn.Linear(num_hiddens1, num_hiddens2)self.lin3 = nn.Linear(num_hiddens2, num_outputs)self.relu = nn.ReLU()def forward(self, X):H1 = self.relu(self.lin1(X.reshape((-1, self.num_inputs))))# 只有在训练模型时才使用dropoutif self.training == True:# 在第一个全连接层之后添加一个dropout层H1 = dropout_layer(H1, dropout1)H2 = self.relu(self.lin2(H1))if self.training == True:# 在第二个全连接层之后添加一个dropout层H2 = dropout_layer(H2, dropout2)out = self.lin3(H2)return outnet = Net(num_inputs, num_outputs, num_hiddens1, num_hiddens2)

训练和测试

num_epochs, lr, batch_size = 10, 0.5, 256
loss = nn.CrossEntropyLoss(reduction='none')
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
trainer = torch.optim.SGD(net.parameters(), lr=lr)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)

运行结果

在这里插入图片描述

暂退法的简洁实现

net = nn.Sequential(nn.Flatten(),nn.Linear(784, 256),nn.ReLU(),# 在第一个全连接层之后添加一个dropout层nn.Dropout(dropout1),nn.Linear(256, 256),nn.ReLU(),# 在第二个全连接层之后添加一个dropout层nn.Dropout(dropout2),nn.Linear(256, 10))def init_weights(m):if type(m) == nn.Linear:nn.init.normal_(m.weight, std=0.01)net.apply(init_weights);

或者是

class Net(nn.Module):def __init__(self, input_size, hidden_size, output_size, dropout_prob):super(Net, self).__init__()self.fc1 = nn.Linear(input_size, hidden_size)self.fc2 = nn.Linear(hidden_size, hidden_size)self.fc3 = nn.Linear(hidden_size, output_size)self.dropout = nn.Dropout(p=dropout_prob)def forward(self, x):x = torch.relu(self.fc1(x))x = self.dropout(x)x = torch.relu(self.fc2(x))x = self.dropout(x)x = self.fc3(x)return x

相关文章:

深度学习神经网络基础知识(二)权重衰减、暂退法(Dropout)

专栏&#xff1a;神经网络复现目录 深度学习神经网络基础知识(二) 本文讲述神经网络基础知识&#xff0c;具体细节讲述前向传播&#xff0c;反向传播和计算图&#xff0c;同时讲解神经网络优化方法&#xff1a;权重衰减&#xff0c;Dropout等方法&#xff0c;最后进行Kaggle实…...

[面试直通版]网络协议面试核心之HTTP,HTTPS,DNS-DNS安全

点击->计算机网络复习的文章集<-点击 目录 典型问题&#xff1a; 部分现象 DNS劫持 DNS欺骗 DDoS攻击 典型问题&#xff1a; 什么是DNS劫持&#xff0c;DNS欺骗&#xff0c;是什么原理如何防范DNS攻击&#xff1f; 部分现象 错误域名解析到纠错导航页面错误域名解析…...

【OJ】A+B=X

&#x1f4da;Description: 数列S中有n个整数&#xff0c;判断S中是否存在两个数A、B&#xff0c;使之和等于X。 ⏳Input: 第一行为T&#xff0c;输入包括T组测试数据。 每组数据第一行包括两个数字n和X&#xff0c;第二行有n个整数&#xff0c;表示数列S&#xff0c;(1&l…...

Python实现性能自动化测试,还可以如此简单

Python实现性能自动化测试&#xff0c;还可以如此简单 目录&#xff1a;导读 一、思考❓❔ 二、基础操作&#x1f528;&#x1f528; 三、综合案例演练&#x1f528;&#x1f528; 四、总结&#x1f4a1;&#x1f4a1; 写在最后 一、思考❓❔ 1.什么是性能自动化测试? 性…...

Leetcode力扣秋招刷题路-0080

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 80. 删除有序数组中的重复项 II 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长…...

Java实现JDBC工具类DbUtils的抽取及程序实现数据库的增删改操作

封装DbUtils 工具类 不知道我们发现没有&#xff0c;不管是对数据库进行查询&#xff0c;还是标准的JDBC 步骤&#xff0c;其开端都是先实现JDBC 的加载注册&#xff0c;接着是获取数据库的连接&#xff0c;最后都是实现关闭连接&#xff0c;释放资源的操作。那我们何不直接把…...

【docker】拉取镜像环境报错解决#ERROR: Get https://registry-1.docker.io/v2/

&#x1f341;博主简介   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录问题报错原因解决方法问题 ERROR…...

java中NumberFormat 、DecimalFormat的介绍及使用,java数字格式化,BigDecimal数字格式化

文章目录前言一、NumberFormat1、概述2、实例化方法3、货币格式化4、百分比格式化5、NumberFormat的坑5.1、不同的格式化对象处理相同数值返回结果不同问题源码分析&#xff1a;二、DecimalFormat1、概述2、常用方法3、字符及含义0与#的区别分组分隔符的使用“%” 将数字乘以10…...

2023什么是分销商城系统?营销,核心功能

大家好&#xff0c;我是你们熟悉而又陌生的好朋友梦龙&#xff0c;一个创业期的年轻人 分销商城是指由网络营销运营商提供的&#xff0c;用于协助供给商搭建、管理及运作其网络销售渠道&#xff0c;协助分销商获取货源渠道的平台。简单来说&#xff0c;就是企业应用无线裂变分…...

天翼数字生活C++客户端实习

面试C客户端实习的岗位&#xff0c;相对不难 面试官&#xff1a;实习主要做的是国产操作系统下的应用&#xff0c;主要做的是视频监控、安防相关的工具&#xff0c;具体就是一个叫做 天翼云眼的软件&#xff0c;目前在windows下和电视下都有对应的应用&#xff0c;就是现在想在…...

Java 接口

文章目录1、接口的概念2、接口的定义3、接口的使用4、接口和抽象类1、接口的概念 类是一种具体的实现体&#xff0c;而接口定义了一种规范&#xff08;抽象方法&#xff09;&#xff0c;接口定义了某一批类所需要遵循的规范&#xff0c;接口不关心类内部的属性和方法的具体实现…...

【React】react-router 路由详解

&#x1f6a9;&#x1f6a9;&#x1f6a9; &#x1f48e;个人主页: 阿选不出来 &#x1f4a8;&#x1f4a8;&#x1f4a8; &#x1f48e;个人简介: 一名大二在校生,学习方向前端,不定时更新自己学习道路上的一些笔记. &#x1f4a8;&#x1f4a8;&#x1f4a8; &#x1f48e;目…...

DaVinci 偏好设置:系统 - 内存和 GPU

偏好设置 - 系统/内存和 GPUPreferences - System/Memory and GPU内存和 GPU Memory and GPU 选项卡提供了内存配置以及 GPU 配置的相关设置。内存配置Memory Configuration系统内存System Memory列出了所用电脑的总的可用内存。限制 Resolve 内存使用到Limit Resolve memory u…...

视频知识点(22)- 教你认清楚YUV420P和YUV420SP的真正差异在哪里

*《音视频开发》系列-总览* 前言 在视频技术领域,存在着非常多的颜色空间模型,YUV颜色空间就是其中之一。我们没有必要把所有的颜色空间都搞明白,只需要关注自己所从事的领域的常用颜色空间模型即可,同样,YUV颜色空间模型也有非常多的子类型,我们也没有必要都搞得清清楚楚…...

企业电子招标采购系统源码Spring Cloud + Spring Boot + MybatisPlus + Redis + Layui

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…...

面试常问-Alpha测试和Beta测试

Alpha测试 Alpha测试是一种验收测试&#xff0c;在识别典型用户可能执行的任务并对其进行测试之前&#xff0c;执行该测试是为了识别所有可能的问题和错误。 尽可能简单地说&#xff0c;这种测试之所以被称为alpha&#xff0c;只是因为它是在软件开发的早期、接近开发结束时和…...

html理论基础

组织&#xff1a;中国互动出版网&#xff08;http://www.china-pub.com/&#xff09;RFC文档中文翻译计划&#xff08;http://www.china-pub.com/compters/emook/aboutemook.htm&#xff09;E-mail&#xff1a;ouyangchina-pub.com译者&#xff1a;黄俊&#xff08;hujiao hj_c…...

【安卓开发】数据存储全方案--详解持久化技术

读书笔记系列&#xff1a;第一行代码 Android 6.1 持久化技术简介 三种数据持久化方式&#xff1a;文件存储、SharedPreference存储以及数据库存储&#xff0c;除此之外还可以存储在SD卡中&#xff08;不安全&#xff09; 6.2 文件存储 该方法不对存储的内容做格式化处理都…...

Vue项目实战

一、产品开发的大致流程 一般公司流程如下&#xff1a; 1、产品经理设计产品原型图 2、UI设计师设计符合需求的原型UI图 3、前端100%还原高保真UI设计图 4、后端设计接口 5、前后端接口联调 6、前后端功能自测 7、测试、运维进行产品的测试和上线 一般大型公司流程如下&…...

Github 学生优惠包 -- 最新防踩坑指南

Github学生优惠包的申请最近越来越麻烦&#xff0c;里面有非常多的坑&#xff0c;留下此文防止各位申请的时候踩到。 此文面向中国大陆真正有学生身份的同学&#xff01;&#xff01;&#xff01; 文章目录前言1.用到的网址2.申请所需3.详细步骤4.踩坑点前言 记得在一年以前还…...

2023年美国大学生数学建模A题:受干旱影响的植物群落建模详解+模型代码(二)

前言 资源放CSDN上面过不了审核,都快结束了都没过审真的麻了,订阅专栏的同学直接加我微信直接发你。我只打造优质专栏。专注建模四年,博主参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。此专栏的目的就是为了让零基础快速使…...

第47章 后端管理首页与Axios拦截守卫原理

1 404全局拦截 1.1 定义布局页&#xff1a;src\views\ 404View.vue <template> <el-container> <el-main> </el-main> <el-footer> <h1>大人&#xff0c;你要找的页面离家出走了&#xff01;小的正在努力寻找中…</h1> </el-fo…...

【前端】小程序开发入门:安装开发工具、目录结构与项目配置

文章目录前期准备目录结构app.jsonpageswindow其他前期准备 开发小程序要先申请一个对应的AppID&#xff1a;微信小程序 (qq.com) 微信官方小程序开发文档&#xff1a;微信开放文档 (qq.com) 然后安装一个小程序开发工具&#xff1a; 选择稳定版&#xff1a; 安装后打开&…...

Java反序列化漏洞——CommonsBeanutils1链分析

一、了解Apache Commons BeanutilsApache Commons Beanutils 是 Apache Commons 工具集下的另一个项目&#xff0c;它提供了对普通Java类对象&#xff08;也称为JavaBean&#xff09;的一些操作方法。在Java中&#xff0c;有很多class的定义都符合这样的规范若干private实例字段…...

三菱PLC的MC协议配置说明

三菱PLC的MC协议配置说明先说一下弱智的踩坑记录详细配置过程1、三菱Q02H CPUQJ71E71-100以太网模块设置MC协议1.1 PLC编程线连接与编程线驱动安装1.2 PLC通讯测试1.3 PLC MC协议设置1.4 PLC断点重启1.5 网络调试助手测试2、三菱Q03UDE CPU内置以太网设置MC协议2.1 PLC编程线连…...

Python基础复习总结

文章目录Python基础复习Python的下载与安装标识符关键字模块条件、循环语句if elif elsefor循环while循环成员测试Python中的数据类型序列列表 list元组 tuple集合 set字典 dictPython关系运算算术运算符比较运算符逻辑运算符位运算符赋值运算符运算符优先级字符串表示字符串字…...

【Linux操作系统】【综合实验五 网络管理与通信】

文章目录一、实验目的二、实验要求三、实验内容四、实验报告要求一、实验目的 要求了解和熟悉Linux网络客户/服务器管理模式&#xff08;client/server&#xff09;与网络环境的配置&#xff1b;熟悉网络远程登录模式与TCP/IP常见终端命令的使用&#xff1b;学会使用在线通信与…...

Qt下实现不规则形状窗口显示

文章目录前言一、资源文件的添加二、初始化窗口三、重写paintEvent函数实现窗口重绘四、重写QMouseEvent相关函数实现不规则窗口的移动及关闭五、demo完整代码六、下载链接总结前言 本文实现了Qt下显示两个不规则形状的窗口demo&#xff0c;其中有Qt的窗口对话框和QPaintEvent…...

使用ribbon实现负载均衡

1.新建两个provider&#xff1a;springcloud-provider-dept-8002 2. 配置跟8001一样 整合 Ribbon 由上述可知&#xff0c;Ribbon 是需要集成在消费端的 所以在消费端 &#xff1a; springcloud-03-consumer-dept-8082 进行修改 在 POM 文件中添加 Ribbon、Eureka 依赖 <!--…...

从页面仔到工程师,前端到底在发挥什么价值

玉伯在前端圈子里摸爬滚打十几年&#xff0c;他对前端价值的理解是什么样的&#xff1f;在他眼里&#xff0c;前端到底是一个怎样的岗位&#xff1f;我们带着这样的问题向他提问。支付宝体验技术部是前端同学最希望加入的团队之一&#xff0c;玉伯带领这个团队做出诸多创新产品…...

wordpress 下拉选择/郑州网站制作选择乐云seo

编译环境 Visual Studio 2013 框架&#xff1a;Framework 4.5 目标系统&#xff1a;window server 2008 R2 现象 如果“目录浏览”为启用状态&#xff1a; url首地址只能显示文件系统不显示网站 如果“目录浏览”为禁用状态&#xff1a; 则出现403.14的错误 解决问题 …...

分类网站模板/网站seo优化推广

Windows7系统基础操作 操作系统是人机交互的时候桥梁&#xff0c;一种计算机软件&#xff0c;软件分为&#xff1a;系统软件应用软件 区别是&#xff1a;系统软件是可以直接安装在硬件上的计算机由硬件和软件两部分组成 操作电脑核心是操作电脑的硬件&#xff0c;操作系统充当着…...

苏州大型网站建设/今天国内最新消息

初识Maven: 一、Maven的基本概念 Maven(翻译为"专家"&#xff0c;"内行")是跨平台的项目管理工具。主要服务于基于Java平台的项目构建&#xff0c;依赖管理和项目信息管理。 1.1、项目构建 项目构建过程包括【清理项目】→【编译项目】→【测试项目】→【生…...

网站从哪些方面做优化/朋友圈信息流广告投放价格

今天在CSDN上看到一个帖子 :".net 4.0和4.5不同版本的Uri.ToString行为不同&#xff1f;"&#xff0c; 调试.NET Framework 源代码发现&#xff0c;是这句代码起的作用 internal static bool ShouldUseLegacyV2Quirks{get{return UriParser.s_QuirksVersion < Uri…...

网站空间登陆/网站建设的公司

首先是实例化的时候的参数的解释 //Initialize SmartThreadPool & Make logs //SmartThreadPool m_hThreadPool; //m_hThreadPool new SmartThreadPool();//声明一个线程池 STPStartInfo stp new STPStartInfo();//线程详细配置参数 //m_hThreadPool.STPStartInfo这个属性…...

政府网站建设经验交流材料/百度网址收录入口

3.set_difference 功能描述&#xff1a;求两个集合的差集 函数原型set_difference(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest); //求两个集合的差集 //注意&#xff1a;两个集合必须是有序序列 //beg1容器1开始迭代器 //end1容器1结束迭代器 /…...