头歌-机器学习 第10次实验 逻辑回归

news2025/6/26 23:56:44

第1关:逻辑回归核心思想

任务描述

本关任务:根据本节课所学知识完成本关所设置的编程题。

相关知识

为了完成本关任务,你需要掌握:

  • 什么是逻辑回归;

  • sigmoid函数。

什么是逻辑回归

当一看到“回归”这两个字,可能会认为逻辑回归是一种解决回归问题的算法,然而逻辑回归是通过回归的思想来解决二分类问题的算法。

那么问题来了,回归的算法怎样解决分类问题呢?其实很简单,逻辑回归是将样本特征和样本所属类别的概率联系在一起,假设现在已经训练好了一个逻辑回归的模型为 f(x) ,模型的输出是样本 x 的标签是 1 的概率,则该模型可以表示, p^​=f(x) 。若得到了样本 x 属于标签 1 的概率后,很自然的就能想到当 p^​>0.5 时 x 属于标签 1 ,否则属于标签 0 。所以就有

y^​={01​p^​<0.5p^​>0.5​

(其中 y^​ 为样本 x 根据模型预测出的标签结果,标签 0 和标签 1 所代表的含义是根据业务决定的,比如在癌细胞识别中可以使 0 代表良性肿瘤, 1 代表恶性肿瘤)。

由于概率是 0 到 1 的实数,所以逻辑回归若只需要计算出样本所属标签的概率就是一种回归算法,若需要计算出样本所属标签,则就是一种二分类算法。

那么逻辑回归中样本所属标签的概率怎样计算呢?其实和线性回归有关系,学习了线性回归的同学肯定知道线性回归无非就是训练出一组参数 WT 和 b 来拟合样本数据,线性回归的输出为 y^​=WTx+b 。不过 y^​ 的值域是 (−∞,+∞) ,如果能够将值域为 (−∞,+∞) 的实数转换成 (0,1) 的概率值的话问题就解决了。要解决这个问题很自然地就能想到将线性回归的输出作为输入,输入到另一个函数中,这个函数能够进行转换工作,假设函数为 σ ,转换后的概率为 p^​ ,则逻辑回归在预测时可以看成p^​=σ(WTx+b) 。 σ 其实就是接下来要介绍的sigmoid函数。

sigmoid 函数

sigmoid函数的公式为:

σ(t)=1/(1+e−t)

函数图像如下图所示:

sigmoid函数的图像可以看出当 t 趋近于 −∞ 时函数值趋近于 0 ,当 t 趋近于 +∞ 时函数值趋近于 1 。可见sigmoid函数的值域是 (0,1) ,满足我们要将 (−∞,+∞) 的实数转换成 (0,1) 的概率值的需求。因此逻辑回归在预测时可以看成

p^​=1/(1+e−WTx+b)

编程要求

根据提示,在右侧编辑器补充 Python 代码,实现sigmoid函数。底层代码会调用您实现的sigmoid函数来进行测试。(提示: numpy.exp()函数可以实现 e 的幂运算)

测试说明

测试用例:

输入:1

预期输出:0.73105857863

输入:-2

预期输出:0.119202922022

#encoding=utf8
import numpy as np
 
def sigmoid(t):
    '''
    完成sigmoid函数计算
    :param t: 负无穷到正无穷的实数
    :return: 转换后的概率值
    :可以考虑使用np.exp()函数
    '''
    #********** Begin **********#
 
    return 1.0/(1+np.exp(-t))
 
    #********** End **********#

第2关:逻辑回归的损失函数

任务描述

本关任务:根据本节课所学知识完成本关所设置的选择题。

相关知识
为什么需要损失函数

训练逻辑回归模型的过程其实与之前学习的线性回归一样,就是去寻找合适的 WT 和 b 使得模型的预测结果与真实结果尽可能一致。所以就需要一个函数能够衡量模型拟合程度的好坏,也就是说当模型拟合误差越大的时候,函数值应该比较大,反之应该比较小,这就是损失函数。

逻辑回归的损失函数

根据上一关中所学习到的知识,我们已经知道了逻辑回归计算出的样本所属类别的概率 p^​=σ(WTx+b) ,样本所属列表的判定条件为

y^​={01​p^​<0.5p^​>0.5​

很明显,在预测样本属于哪个类别时取决于算出来的p^​。从另外一个角度来说,假设现在有一个样本的真实类别为 1 ,模型预测样本为类别 1 的概率为 0.9 的话,就意味着这个模型认为当前样本的类别有 90% 的可能性为 1 ,有 10% 的可能性为0。所以从这个角度来看,逻辑回归的损失函数与 p^​ 有关。

当然逻辑回归的损失函数不仅仅与 p^​ 有关,它还与真实类别有关。假设现在有两种情况,情况A:现在有个样本的真实类别是 0 ,但是模型预测出来该样本是类别 1 的概率是 0.7 (也就是说类别 0 的概率为 0.3 );情况B:现在有个样本的真实类别是 0 ,但是模型预测出来该样本是类别 1 的概率是 0.6 (也就是说类别 0 的概率为 0.4 );请你思考 2 秒钟,AB两种情况哪种情况的误差更大?很显然,情况A的误差更大!因为情况A中模型认为样本是类别 0 的可能性只有 30% ,而B有 40% 。

假设现在又有两种情况,情况A:现在有个样本的真实类别是 0 ,但是模型预测出来该样本是类别 1 的概率是 0.7 (也就是说类别 0 的概率为 0.3 );情况B:现在有个样本的真实类别是 1 ,但是模型预测出来该样本是类别 1 的概率是 0.3 (也就是说类别 0 的概率为 0.7 );请你再思考 2 秒钟,AB两种情况哪种情况的误差更大?很显然,一样大!

所以逻辑回归的损失函数如下,其中 cost 表示损失函数的值, y 表示样本的真实类别:

cost=−ylog(p^​)−(1−y)log(1−p^​)

这个式子其实很好理解,当样本的真实类别为 1 时,式子就变成了 cost=−log(p^​)。此时函数图像如下:

从图像能看出当样本的真实类别为1的前提下,p^​ 越大,损失函数值就越小。因为 p^​ 越大就越说明模型越认为该样本的类别为 1 。

当样本的真实类别为 0 时,式子就变成了 cost=−log(1−p^​) 。此时函数图像如下:

从图像能看出当样本的真实类别为 0 的前提下,hatp 越大,损失函数值就越大。因为 p^​ 越大就越说明模型越认为该样本的类别为 1 。

cost=−ylog(p^​)−(1−y)log(1−p^​) 是一个样本的损失计算公式,但是在一般情况下需要计算的是 m 条样本数据的平均损失值,所以损失函数的最终形态如下,其中 m 表示数据集中样本的数量, i 表示数据集中第 i 个样本:

cost=−m1​sumi=0m​y(i)log(p^​(i))−(1−y(i))log(1−p^​(i))

知道了逻辑回归的损失函数之后,逻辑回归的训练流程就很明显了,就是寻找一组合适的 WT 和 b ,使得损失值最小。找到这组参数后模型就确定下来了。

编程要求

根据相关知识,按照要求完成右侧选择题任务,包含单选题和多选题。

测试说明

平台会对你选择的答案进行判断,全对则通过测试。

1、

逻辑回归的损失函数可以写成如下形式 (A)
             ^         
       −log( p ) y=1
cost={          
                ^
        −log(1− p y=0

A、对
B、错


2、下列说法正确的是 (A、C、D)
A、损失值能够衡量模型在训练数据集上的拟合程度
B、sigmoid函数不可导
C、sigmoid函数的输入越大,输出就越大
D、训练的过程,就是寻找合适的参数使得损失函数值最小的过程


3、sigmoid函数(对数几率函数)相对于单位阶跃函数有哪些好处? (A、B)
A、sigmoid函数可微分
B、sigmoid函数处处连续
C、sigmoid函数不是单调的
D、sigmoid函数最多计算二阶导


4、逻辑回归的优点有哪些? (D)
A、需要事先对数据的分布做假设
B、可以得到“类别”的真正的概率预测
C、可以用闭式解求解
D、可以用现有的数值优化算法求解

第3关:梯度下降

任务描述

本关任务:用 Python 构建梯度下降算法,并求取目标函数最小值。

相关知识

为了完成本关任务,你需要掌握:梯度下降算法

什么是梯度

梯度:梯度的本意是一个向量,由函数对每个参数的偏导组成,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向变化最快,变化率最大。

梯度下降算法原理

算法思想:梯度下降是一种非常通用的优化算法,能够为大范围的问题找到最优解。梯度下降的中心思想就是迭代地调整参数从而使损失函数最小化。假设你迷失在山上的迷雾中,你能感觉到的只有你脚下路面的坡度。快速到达山脚的一个策略就是沿着最陡的方向下坡。这就是梯度下降的做法:通过测量参数向量 θ 相关的损失函数的局部梯度,并不断沿着降低梯度的方向调整,直到梯度降为 0 ,达到最小值。

梯度下降公式如下:

对应到每个权重公式为:

其中 η 为学习率,是 0 到 1 之间的值,是个超参数,需要我们自己来确定大小。

算法原理: 在传统机器学习中,损失函数通常为凸函数,假设此时只有一个参数,则损失函数对参数的梯度即损失函数对参数的导数。如果刚开始参数初始在最优解的左边,

很明显,这个时候损失函数对参数的导数是小于 0 的,而学习率是一个 0 到 1 之间的数,此时按照公式更新参数,初始的参数减去一个小于 0 的数是变大,也就是在坐标轴上往右走,即朝着最优解的方向走。同样的,如果参数初始在最优解的右边,

此时按照公式更新,参数将会朝左走,即最优解的方向。所以,不管刚开始参数初始在何位置,按着梯度下降公式不断更新,参数都会朝着最优解的方向走。 #####梯度下降算法流程

  1. 随机初始参数;
  2. 确定学习率;
  3. 求出损失函数对参数梯度;
  4. 按照公式更新参数;
  5. 重复 3 、 4 直到满足终止条件(如:损失函数或参数更新变化值小于某个阈值,或者训练次数达到设定阈值)。
编程要求

根据提示,使用 Python 实现梯度下降算法,并损失函数最小值时对应的参数thetatheta会返回给外部代码,由外部代码来判断theta是否正确。

测试说明

损失函数为:loss=2∗(θ−3) 最优参数为:3.0 你的答案跟最优参数的误差低于0.0001才能通关。

# -*- coding: utf-8 -*-
 
import numpy as np
import warnings
warnings.filterwarnings("ignore")
 
def gradient_descent(initial_theta,eta=0.05,n_iters=1000,epslion=1e-8):
    '''
    梯度下降
    :param initial_theta: 参数初始值,类型为float
    :param eta: 学习率,类型为float
    :param n_iters: 训练轮数,类型为int
    :param epslion: 容忍误差范围,类型为float
    :return: 训练后得到的参数
    '''
    #   请在此添加实现代码   #
    #********** Begin *********#
    
    theta = initial_theta
    i_iter = 0
    while i_iter < n_iters:
        gradient = 2*(theta-3)
        last_theta = theta
        theta = theta - eta*gradient
        if(abs(theta-last_theta)<epslion):
            break
        i_iter +=1
    return theta
    #********** End **********#

第4关:动手实现逻辑回归 - 癌细胞精准识别

任务描述

本关任务:使用逻辑回归算法建立一个模型,并通过梯度下降算法进行训练,得到一个能够准确对癌细胞进行识别的模型。

相关知识

为了完成本关任务,你需要掌握:

  • 逻辑回归算法流程;
  • 逻辑回归中的梯度下降。
数据集介绍

乳腺癌数据集,其实例数量是 569 ,实例中包括诊断类和属性,帮助预测的属性一共 30 个,各属性包括为 radius 半径(从中心到边缘上点的距离的平均值), texture 纹理(灰度值的标准偏差)等等,类包括: WDBC-Malignant 恶性和 WDBC-Benign 良性。用数据集的 80% 作为训练集,数据集的 20% 作为测试集,训练集和测试集中都包括特征和类别。其中特征和类别均为数值类型,类别中 0 代表良性, 1 代表恶性。

构建逻辑回归模型

由数据集可以知道,每一个样本有 30 个特征和 1 个标签,而我们要做的事就是通过这 30 个特征来分析细胞是良性还是恶性(其中标签 y=0 表示是良性, y=1 表示是恶性)。逻辑回归算法正好是一个二分类模型,我们可以构建一个逻辑回归模型,来对癌细胞进行识别。模型如下:

z=b+w1​x1​+w2​x2​+...+wn​xn​

y=1+e−z1​

其中 xi​表示第 i 个特征,wi​表示第 i 个特征对应的权重,b表示偏置。 为了方便,我们稍微将模型进行变换:

z=w0​x0​+w1​x1​+w2​x2​+...+wn​xn​

其中x0​等于 1 。

Z=heta.X

heta=(w0​,w1​,...,wn​)

X=(1,x1​,...,xn​)

y=1+e−θ.X1​

我们将一个样本输入模型,如果预测值大于等于 0.5 则判定为 1 类别,如果小于 0.5 则判定为 0 类别。

训练逻辑回归模型

我们已经知道如何构建一个逻辑回归模型,但是如何得到一个能正确对癌细胞进行识别的模型呢?通常,我们先将数据输入到模型,从而得到一个预测值,再将预测值与真实值结合,得到一个损失函数,最后用梯度下降的方法来优化损失函数,从而不断的更新模型的参数 θ ,最后得到一个能够正确对良性细胞和癌细胞进行分类的模型。

在上一节中,我们知道要使用梯度下降算法首先要知道损失函数对参数的梯度,即损失函数对每个参数的偏导,求解步骤如下:

loss=−ylna−(1−y)ln(1−a)

∂w∂loss​=∂a∂loss​.∂z∂a​.∂w∂z​

∂a∂loss​=−ay​−1−a1−y​(−1)=a(1−a)a−y​

∂z∂a​=(1+e−z)2e−z​=a.(1−a)

∂w∂z​=x

∂w∂loss​=(a−y)x

其中a为预测值,y为真实值。 于是,在逻辑回归中的梯度下降公式如下:

wi​=wi​−η(a−y)xi​

训练流程:

同梯度下降算法流程:请参见上一关卡

编程要求

根据提示,在右侧编辑器Begin-End处补充 Python 代码,构建一个逻辑回归模型,并对其进行训练,最后将得到的逻辑回归模型对癌细胞进行识别。

测试说明

只需返回预测结果即可,程序内部会检测您的代码,预测正确率高于 95% 视为过关。

提示:构建模型时 x0​ 是添加在数据的左边,请根据提示构建模型,且返回theta形状为(n,)n为特征个数。

# -*- coding: utf-8 -*-
 
import numpy as np
import warnings
warnings.filterwarnings("ignore")
 
def sigmoid(x):
    '''
    sigmoid函数
    :param x: 转换前的输入
    :return: 转换后的概率
    '''
    return 1/(1+np.exp(-x))
 
 
def fit(x,y,eta=1e-3,n_iters=10000):
    '''
    训练逻辑回归模型
    :param x: 训练集特征数据,类型为ndarray
    :param y: 训练集标签,类型为ndarray
    :param eta: 学习率,类型为float
    :param n_iters: 训练轮数,类型为int
    :return: 模型参数,类型为ndarray
    '''
    #   请在此添加实现代码   #
    #********** Begin *********#
    theta = np.zeros(x.shape[1])
    i_iter = 0
    while i_iter < n_iters:
        gradient = (sigmoid(x.dot(theta))-y).dot(x)
        theta = theta -eta*gradient
        i_iter += 1
    return theta
 
    #********** End **********#

第5关:手写数字识别

任务描述

本关任务:使用sklearn中的LogisticRegression类完成手写数字识别任务。

相关知识

为了完成本关任务,你需要掌握如何使用sklearn提供的LogisticRegression类。

数据简介

本关使用的是手写数字数据集,该数据集有 1797 个样本,每个样本包括 8*8 像素(实际上是一条样本有 64 个特征,每个像素看成是一个特征,每个特征都是float类型的数值)的图像和一个 [0, 9] 整数的标签。比如下图的标签是 2 :

sklearn为该数据集提供了接口,若想使用该数据集,代码如下:

 
  1. from sklearn import datasets
  2. import matplotlib.pyplot as plt
  3. #加载数据集
  4. digits = datasets.load_digits()
  5. #X表示图像数据,y表示标签
  6. X = digits.data
  7. y = digits.target
  8. #将第233张手写数字可视化
  9. plt.imshow(digits.images[232])
LogisticRegression

LogisticRegression中默认实现了 OVR ,因此LogisticRegression可以实现多分类。LogisticRegression的构造函数中有三个常用的参数可以设置:

  • solver{'newton-cg' , 'lbfgs', 'liblinear', 'sag', 'saga'}, 分别为几种优化算法。默认为liblinear

  • C:正则化系数的倒数,默认为 1.0 ,越小代表正则化越强;

  • max_iter:最大训练轮数,默认为 100 。

sklearn中其他分类器一样,LogisticRegression类中的fit函数用于训练模型,fit函数有两个向量输入:

  • X:大小为 [样本数量,特征数量] 的ndarray,存放训练样本;

  • Y:值为整型,大小为 [样本数量] 的ndarray,存放训练样本的分类标签。

LogisticRegression类中的predict函数用于预测,返回预测标签,predict函数有一个向量输入:

  • X:大小为[样本数量,特征数量]的ndarray,存放预测样本。

LogisticRegression的使用代码如下:

 
  1. logreg = LogisticRegression(solver='lbfgs',max_iter =10,C=10)
  2. logreg.fit(X_train, Y_train)
  3. result = logreg.predict(X_test)
编程要求

填写digit_predict(train_sample, train_label, test_sample)函数完成手写数字识别任务,其中:

  • train_image:训练集图像,类型为ndarrayshape=[-1, 8, 8]

  • train_label:训练集标签,类型为ndarray

  • test_image:测试集图像,类型为ndarray

测试说明

只需返回预测结果即可,程序内部会检测您的代码,预测正确率高于 0.97 视为过关。

from sklearn.linear_model import LogisticRegression
 
def digit_predict(train_image, train_label, test_image):
    '''
    实现功能:训练模型并输出预测结果
    :param train_sample: 包含多条训练样本的样本集,类型为ndarray,shape为[-1, 8, 8]
    :param train_label: 包含多条训练样本标签的标签集,类型为ndarray
    :param test_sample: 包含多条测试样本的测试集,类型为ndarry
    :return: test_sample对应的预测标签
    '''
 
    #************* Begin ************#
    flat_train_image = train_image.reshape((-1, 64))
    # 训练集标准化
    train_min = flat_train_image.min()
    train_max = flat_train_image.max()
    flat_train_image = (flat_train_image-train_min)/(train_max-train_min)
    # 测试集变形
    flat_test_image = test_image.reshape((-1, 64))
    # 测试集标准化
    test_min = flat_test_image.min()
    test_max = flat_test_image.max()
    flat_test_image = (flat_test_image - test_min) / (test_max - test_min)
 
    # 训练--预测
    rf = LogisticRegression(C=4.0)
    rf.fit(flat_train_image, train_label)
    return rf.predict(flat_test_image)
 
    #************* End **************#

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

迷宫 — — 蓝桥杯(动态规划)

迷宫 题目&#xff1a; 输入样例&#xff1a; 3 1 1 1 2 3 4 5 6 7 8 9 2 2 1 3 1 R输出样例&#xff1a; 21思路&#xff1a; 题目大意&#xff1a;给定一个n x m的平面网格&#xff0c;并且每一个格子都有一定的代价&#xff0c;并且设有障碍物和陷阱&#xff0c;障碍物的意…

图书馆自习室|基于SSM的图书馆自习室座位预约小程序设计与实现(源码+数据库+文档)

图书馆自习室目录 基于SSM的图书馆自习室座位预约小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、小程序端&#xff1a; 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a…

专为苹果系统设计的精美可视化图表 | 开源日报 No.219

danielgindi/Charts Stars: 27.3k License: Apache-2.0 Charts 是为 iOS/tvOS/OSX 提供美观图表的开源项目&#xff0c;是跨平台 MPAndroidChart 在苹果设备上的实现。该项目提供了以下主要功能和优势&#xff1a; 支持 iOS、tvOS 和 macOS 平台使用 Swift 编写&#xff0c;可…

14款DevOps/SRE工具,助力提升运维效率

简介 随着平台工程的兴起&#xff0c;DevOps 和 SRE 不断发展&#xff0c;带来了新一代工具&#xff0c;旨在提高软件开发和运维的效率、可扩展性和可靠性。 在本篇文章中&#xff0c;我们将深入探讨一些最具发展前景的工具&#xff0c;它们正在塑造持续集成与部署、监控与可观…

【网站项目】校园二手交易平台小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

STL库 —— list 的编写

目录 一、成员变量 ​编辑 二、push_back 函数 三、迭代器 iterator 3.1 iterator 结构体 3.2 begin() 与 end() 函数 3.3 iterator 运算符重载 3.4 -> 的重载 3.5 const_iterator 四、测试代码 五、修饰符成员 5.1 insert 函数 5.2 erase 函数 5.3 push 函数…

【SQL Server】数据库死锁

在软件使用了SQL Server数据库的场合&#xff0c;运行软件时&#xff0c;出现&#xff1a; "事务(进程 ID **)与另一个进程被死锁在 锁 资源上&#xff0c;并且已被选作死锁牺牲品。请重新运行该事物"。 分析原因&#xff1a;软件多个进程在调用SQL语句访问数据库表的…

计算机网络——WEB服务器编程实验

实验目的 1. 处理一个 http 请求 2. 接收并解析 http 请求 3. 从服务器文件系统中获得被请求的文件 4. 创建一个包括被请求的文件的 http 响应信息 5. 直接发送该信息到客户端 具体内容 一、C 程序来实现 web 服务器功能。 二、用 HTML 语言编写两个 HTML文件&#xff0c;并…

使用阿里云试用Elasticsearch学习:4. 聚合——2

近似聚合 如果所有的数据都在一台机器上&#xff0c;那么生活会容易许多。 CS201 课上教的经典算法就足够应付这些问题。如果所有的数据都在一台机器上&#xff0c;那么也就不需要像 Elasticsearch 这样的分布式软件了。不过一旦我们开始分布式存储数据&#xff0c;就需要小心…

flutter中鼠标检测事件的应用---主要在于网页端使用

flutter中鼠标检测事件的应用—主要在于网页端使用 鼠标放上去 主要代码 import package:flutter/material.dart;class CustomStack extends StatefulWidget {override_CustomStack createState() > _CustomStack(); }class _CustomStack extends State<CustomStack>…

规则引擎之LiteFlow应用

官网地址&#xff1a;LiteFlow DEMO 整体结构 1.引入maven依赖 <dependency><groupId>com.yomahub</groupId><artifactId>liteflow-spring-boot-starter</artifactId><version>2.11.4.2</version> </dependency> 2. 配置yml …

TensorFlow学习之:深度学习基础

神经网络基础 神经网络是深度学习的核心&#xff0c;它们受人脑的结构和功能启发&#xff0c;能够通过学习大量数据来识别模式和解决复杂问题。神经网络的基本工作原理包括前向传播和反向传播两个阶段。 前向传播&#xff08;Forward Propagation&#xff09; 前向传播是神经…

微信小程序制作圆形进度条

微信小程序制作圆形进度条 1. 建立文件夹 选择一个目录建立一个文件夹&#xff0c;比如 mycircle 吧&#xff0c;另外把对应 page 的相关文件都建立出来&#xff0c;包括 js&#xff0c;json&#xff0c;wxml 和 wxcc。 2. 开启元件属性 在 mycircle.json中开启 component 属…

uniapp小程序中使用video视频播放卡顿

问题:在使用uniapp小程序的video视频播放,视频已经在播放了,但是进度条没走,还是卡顿的状态(测试ios能正常使用,安卓手机会出现此问题) 在网上找了很多方法,最多的说是用:custom-cache"false",试了并没有效果,看来和我问题不一样,后来用了个简单粗暴的方法,发现是有效…

docker 创建容器过程

结合下图&#xff0c;本文讨论docker 创建容器过程&#xff1a; START└── [用户通过Docker Client发出指令]└── (1) docker run 或 docker create 命令├── (2) Docker Client与Docker Daemon建立通信连接└── (3) Docker Daemon接收到创建容器请求├── (4) 检查…

密码学基础--搞清RFC和PKCS(1)

目录 1. CryptoDriver里KeyElement格式 2. 挖掘RFC标准 3.小结 昨天从生成密钥对开始逐步了解了公钥、证书等各种编码方式&#xff0c;今天继续趁热打&#xff0c;做一个理论知识汇总。 Ps:我只是标准的翻译搬运工。 1. CryptoDriver里KeyElement格式 在 CryptoKeyElemen…

实现鼠标在页面点击出现焦点及大十字星

近段时间&#xff0c;在完成项目进度情况显示时候&#xff0c;用户在操作鼠标时候&#xff0c;显示当鼠标所在位置对应时间如下图所示 代码实现步骤如下&#xff1a; 1.首先引用 jquery.1.7.js 2.再次引用raphael.js 3.然后引用graphics.js 4.最后引用mfocus.js 其中mfocu…

地理信息系统(ArcGIS)在水文水资源、水环境中的应用

刘老师&#xff08;副教授&#xff09;&#xff1a;来自北京重点高校资深专家&#xff0c;长期从事水资源与水环境、流域污染控制与管理、非点源模拟与控制、环境信息系统开发、环境遥感与GIS应用等领域的研究&#xff0c;发表多篇Sci论文、具有资深的技术底蕴和专业背景。 1、…

多张固定宽度元素,随着屏幕尺寸变化自动换行

背景&#xff1a;多张固定宽度元素&#xff0c;随着屏幕尺寸变化自动换行实现&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevic…

最好的 iPhone 解锁器解决方案功能、优点和缺点

现最受好评的 iPhone 解锁器&#xff0c;例如 奇客解锁、iPassGo 等。深入了解它们的优缺点和兼容性&#xff0c;以做出明智的决定。了解如何解锁 iPhone 并解决有关解锁方法、PIN 绕过和潜在风险的常见问题。 1、奇客手机解锁 奇客手机解锁是一款适用于 iOS 的多功能解锁工具…