主頁 >  其他 > Batch Normalization詳解

Batch Normalization詳解

2020-10-23 23:46:24 其他

目錄
  • 動機
    • 單層視角
    • 多層視角
  • 什么是Batch Normalization
  • Batch Normalization的反向傳播
  • Batch Normalization的預測階段
  • Batch Normalization的作用
  • 幾個問題
    • 卷積層如何使用BatchNorm?
    • 沒有scale and shift程序可不可以?
    • BN層放在ReLU前面還是后面?
    • BN層為什么有效?
  • 參考

博客:blog.shinelee.me | 博客園 | CSDN

動機

在博文《為什么要做特征歸一化/標準化? 博客園 | csdn | blog》中,我們介紹了對輸入進行Standardization后,梯度下降演算法更容易選擇到合適的(較大的)學習率,下降程序會更加穩定,

在博文《網路權重初始化方法總結(下):Lecun、Xavier與He Kaiming 博客園 | csdn | blog》中,我們介紹了如何通過權重初始化讓網路在訓練之初保持激活層的輸出(輸入)為zero mean unit variance分布,以減輕梯度消失和梯度爆炸,

但在訓練程序中,權重在不斷更新,導致激活層輸出(輸入)的分布會一直變化,可能無法一直保持zero mean unit variance分布,還是有梯度消失和梯度爆炸的可能,直覺上感到,這可能是個問題,下面具體分析,

單層視角

http://gradientscience.org/batchnorm/

神經網路可以看成是上圖形式,對于中間的某一層,其前面的層可以看成是對輸入的處理,后面的層可以看成是損失函式,一次反向傳播程序會同時更新所有層的權重\(W_1, W_2, \dots, W_L\),前面層權重的更新會改變當前層輸入的分布,而跟據反向傳播的計算方式,我們知道,對\(W_k\)的更新是在假定其輸入不變的情況下進行的,如果假定第\(k\)層的輸入節點只有2個,對第\(k\)層的某個輸出節點而言,相當于一個線性模型\(y = w_1 x_1 + w_2 x_2 + b\),如下圖所示,

https://wiki2.org/en/Linear_classifier#/media/File:Svm_separating_hyperplanes.png

假定當前輸入\(x_1\)\(x_2\)的分布如圖中圓點所示,本次更新的方向是將直線\(H_1\)更新成\(H_2\),本以為切分得不錯,但是當前面層的權重更新完畢,當前層輸入的分布換成了另外一番樣子,直線相對輸入分布的位置可能變成了\(H_3\),下一次更新又要根據新的分布重新調整,直線調整了位置,輸入分布又在發生變化,直線再調整位置,就像是直線和分布之間的“追逐游戲”,對于淺層模型,比如SVM,輸入特征的分布是固定的,即使拆分成不同的batch,每個batch的統計特性也是相近的,因此只需調整直線位置來適應輸入分布,顯然要容易得多,而深層模型,每層輸入的分布和權重在同時變化,訓練相對困難,

多層視角

上面是從網路中單拿出一層分析,下面看一下多層的情況,在反向傳播程序中,每層權重的更新是在假定其他權重不變的情況下,向損失函式降低的方向調整自己,問題在于,在一次反向傳播程序中,所有的權重會同時更新,導致層間配合“缺乏默契”,每層都在進行上節所說的“追逐游戲”,而且層數越多,相互配合越困難,文中把這個現象稱之為 Internal Covariate Shift,示意圖如下,為了避免過于震蕩,學習率不得不設定得足夠小,足夠小就意味著學習緩慢,

https://gab41.lab41.org/batch-normalization-what-the-hey-d480039a9e3b

為此,希望對每層輸入的分布有所控制,于是就有了Batch Normalization,其出發點是對每層的輸入做Normalization,只有一個資料是談不上Normalization的,所以是對一個batch的資料進行Normalization,

什么是Batch Normalization

Batch Normalization,簡稱BatchNorm或BN,翻譯為“批歸一化”,是神經網路中一種特殊的層,如今已是各種流行網路的標配,在原paper中,BN被建議插入在(每個)ReLU激活層前面,如下所示,

http://gradientscience.org/batchnorm/

如果batch size為\(m\),則在前向傳播程序中,網路中每個節點都有\(m\)個輸出,所謂的Batch Normalization,就是對該層每個節點的這\(m\)個輸出進行歸一化再輸出,具體計算方式如下,

Batch Normalization Transform

其操作可以分成2步,

  1. Standardization:首先對\(m\)\(x\)進行 Standardization,得到 zero mean unit variance的分布\(\hat{x}\)
  2. scale and shift:然后再對\(\hat{x}\)進行scale and shift,縮放并平移到新的分布\(y\),具有新的均值\(\beta\)方差\(\gamma\)

假設BN層有\(d\)個輸入節點,則\(x\)可構成\(d \times m\)大小的矩陣\(X\),BN層相當于通過行操作將其映射為另一個\(d\times m\)大小的矩陣\(Y\),如下所示,

Batch Normalization將2個程序寫在一個公式里如下,

\[y_i^{(b)} = BN\left(x_{i}\right)^{(b)}=\gamma \cdot\left(\frac{x_{i}^{(b)}-\mu\left(x_{i}\right)}{\sqrt{\sigma\left(x_{i}\right)^2 + \epsilon}}\right)+\beta \]

其中,\(x_i^{(b)}\)表示輸入當前batch的\(b\)-th樣本時該層\(i\)-th輸入節點的值,\(x_i\)\([x_i^{(1)}, x_i^{(2)}, \dots, x_i^{(m)}]\)構成的行向量,長度為batch size \(m\)\(\mu\)\(\sigma\)為該行的均值和標準差,\(\epsilon\)為防止除零引入的極小量(可忽略),\(\gamma\)\(\beta\)為該行的scale和shift引數,可知

  • \(\mu\)\(\sigma\)為當前行的統計量,不可學習,
  • \(\gamma\)\(\beta\)為待學習的scale和shift引數,用于控制\(y_i\)的方差和均值,
  • BN層中,\(x_i\)\(x_j\)之間不存在資訊交流\((i \neq j)\)

可見,無論\(x_i\)原本的均值和方差是多少,通過BatchNorm后其均值和方差分別變為待學習的\(\beta\)\(\gamma\)

Batch Normalization的反向傳播

對于目前的神經網路計算框架,一個層要想加入到網路中,要保證其是可微的,即可以求梯度,BatchNorm的梯度該如何求取?

反向傳播求梯度只需抓住一個關鍵點,如果一個變數對另一個變數有影響,那么他們之間就存在偏導數,找到直接相關的變數,再配合鏈式法則,公式就很容易寫出了,

\[\begin{array}{l}{\frac{\partial \ell}{\partial \gamma}=\sum_{i=1}^{m} \frac{\partial \ell}{\partial y_{i}} \cdot \widehat{x}_{i}} \\ {\frac{\partial \ell}{\partial \beta}=\sum_{i=1}^{m} \frac{\partial \ell}{\partial y_{i}}} \\{\frac{\partial \ell}{\partial \widehat{x}_{i}}=\frac{\partial \ell}{\partial y_{i}} \cdot \gamma} \\ {\frac{\partial \ell}{\partial \sigma_{B}^{2}}=\sum_{i=1}^{m} \frac{\partial \ell}{\partial \widehat{x}_{i}} \cdot\left(x_{i}-\mu_{\mathcal{B}}\right) \cdot \frac{-1}{2}\left(\sigma_{\mathcal{B}}^{2}+\epsilon\right)^{-3 / 2}} \\ {\frac{\partial \ell}{\partial \mu_{\mathcal{B}}}=\left(\sum_{i=1}^{m} \frac{\partial \ell}{\partial \widehat{x}_{i}} \cdot \frac{-1}{\sqrt{\sigma_{\mathcal{B}}^{2}+\epsilon}}\right)+\frac{\partial \ell}{\partial \sigma_{\mathcal{B}}^{2}} \cdot \frac{\sum_{i=1}^{m}-2\left(x_{i}-\mu_{\mathcal{B}}\right)}{m}} \\ {\frac{\partial \ell}{\partial x_{i}} = \frac{\partial \ell}{\partial \widehat{x}_{i}} \cdot \frac{1}{\sqrt{\sigma_{\mathcal{B}}^{2}+\epsilon}} + \frac{\partial \ell}{\partial \sigma_{\mathcal{B}}^{2}} \cdot \frac{2\left(x_{i}-\mu_{\mathcal{B}}\right)}{m} + \frac{\partial \ell}{\partial \mu_{\mathcal{B}}} \cdot \frac{1}{m}} \\ \end{array} \]

根據反向傳播的順序,首先求取損失\(\ell\)對BN層輸出\(y_i\)的偏導\(\frac{\partial \ell}{\partial y_{i}}\),然后是對可學習引數的偏導\(\frac{\partial \ell}{\partial \gamma}\)\(\frac{\partial \ell}{\partial \beta}\),用于對引數進行更新,想繼續回傳的話還需要求對輸入 \(x\)偏導,于是引出對變數\(\mu\)\(\sigma^2\)\(\hat{x}\)的偏導,根據鏈式法則再求這些變數對\(x\)的偏導,

在實際實作時,通常以矩陣或向量運算方式進行,比如逐元素相乘、沿某個axis求和、矩陣乘法等操作,具體可以參見Understanding the backward pass through Batch Normalization Layer和BatchNorm in Caffe,

Batch Normalization的預測階段

在預測階段,所有引數的取值是固定的,對BN層而言,意味著\(\mu\)\(\sigma\)\(\gamma\)\(\beta\)都是固定值,

\(\gamma\)\(\beta\)比較好理解,隨著訓練結束,兩者最終收斂,預測階段使用訓練結束時的值即可,

對于\(\mu\)\(\sigma\),在訓練階段,它們為當前mini batch的統計量,隨著輸入batch的不同,\(\mu\)\(\sigma\)一直在變化,在預測階段,輸入資料可能只有1條,該使用哪個\(\mu\)\(\sigma\),或者說,每個BN層的\(\mu\)\(\sigma\)該如何取值?可以采用訓練收斂最后幾批mini batch的 \(\mu\)\(\sigma\)的期望,作為預測階段的\(\mu\)\(\sigma\)如下所示,

Training a Batch-Normalized Network

因為Standardization和scale and shift均為線性變換,在預測階段所有引數均固定的情況下,引數可以合并成\(y=kx+b\)的形式,如上圖中行號11所示,

Batch Normalization的作用

使用Batch Normalization,可以獲得如下好處,

  • 可以使用更大的學習率,訓練程序更加穩定,極大提高了訓練速度,
  • 可以將bias置為0,因為Batch Normalization的Standardization程序會移除直流分量,所以不再需要bias,
  • 對權重初始化不再敏感,通常權重采樣自0均值某方差的高斯分布,以往對高斯分布的方差設定十分重要,有了Batch Normalization后,對與同一個輸出節點相連的權重進行放縮,其標準差\(\sigma\)也會放縮同樣的倍數,相除抵消,
  • 對權重的尺度不再敏感,理由同上,尺度統一由\(\gamma\)引數控制,在訓練中決定,
  • 深層網路可以使用sigmoid和tanh了,理由同上,BN抑制了梯度消失,
  • Batch Normalization具有某種正則作用,不需要太依賴dropout,減少過擬合

幾個問題

卷積層如何使用BatchNorm?

For convolutional layers, we additionally want the normalization to obey the convolutional property – so that different elements of the same feature map, at different locations, are normalized in the same way. To achieve this, we jointly normalize all the activations in a mini-batch, over all locations.

...

so for a mini-batch of size m and feature maps of size p × q, we use the effective mini-batch of size m′

= |B| = m · pq. We learn a pair of parameters γ(k) and β(k) per feature map, rather than per activation.

—— Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

1個卷積核產生1個feature map,1個feature map有1對\(\gamma\)\(\beta\)引數,同一batch同channel的feature map共享同一對\(\gamma\)\(\beta\)引數,若卷積層有\(n\)個卷積核,則有\(n\)\(\gamma\)\(\beta\)引數,

沒有scale and shift程序可不可以?

BatchNorm有兩個程序,Standardization和scale and shift,前者是機器學習常用的資料預處理技術,在淺層模型中,只需對資料進行Standardization即可,Batch Normalization可不可以只有Standardization呢?

答案是可以,但網路的表達能力會下降,

直覺上理解,淺層模型中,只需要模型適應資料分布即可,對深度神經網路,每層的輸入分布和權重要相互協調,強制把分布限制在zero mean unit variance并不見得是最好的選擇,加入引數\(\gamma\)\(\beta\),對輸入進行scale and shift,有利于分布與權重的相互協調,特別地,令\(\gamma=1, \beta = 0\)等價于只用Standardization,令\(\gamma=\sigma, \beta=\mu\)等價于沒有BN層,scale and shift涵蓋了這2種特殊情況,在訓練程序中決定什么樣的分布是適合的,所以使用scale and shift增強了網路的表達能力,

表達能力更強,在實踐中性能就會更好嗎?并不見得,就像曾經引數越多不見得性能越好一樣,caffenet-benchmark-batchnorm中,作者實驗發現沒有scale and shift性能可能還更好一些,圖見下一小節,

BN層放在ReLU前面還是后面?

paper建議將BN層放置在ReLU前,因為ReLU激活函式的輸出非負,不能近似為高斯分布,

The goal of Batch Normalization is to achieve a stable distribution of activation values throughout training, and in our experiments we apply it before the nonlinearity since that is where matching the first and second moments is more likely to result in a stable distribution.

—— Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

但是,在caffenet-benchmark-batchnorm中,作者基于caffenet在ImageNet2012上做了如下對比實驗,

https://github.com/ducha-aiki/caffenet-benchmark/blob/master/batchnorm.md

實驗表明,放在前后的差異似乎不大,甚至放在ReLU后還好一些,

放在ReLU后相當于直接對每層的輸入進行歸一化,如下圖所示,這與淺層模型的Standardization是一致的,

https://www.microsoft.com/en-us/research/video/how-does-batch-normalization-help-optimization/

caffenet-benchmark-batchnorm中,還有BN層與不同激活函式、不同初始化方法、dropout等排列組合的對比實驗,可以看看,

所以,BN究竟應該放在激活的前面還是后面?以及,BN與其他變數,如激活函式、初始化方法、dropout等,如何組合才是最優?可能只有直覺和經驗性的指導意見,具體問題的具體答案可能還是得實驗說了算(微笑),

BN層為什么有效?

BN層的有效性已有目共睹,但為什么有效可能還需要進一步研究,這里有一些解釋,

  • BN層讓損失函式更平滑,論文How Does Batch Normalization Help Optimization中,通過分析訓練程序中每步梯度方向上步長變化引起的損失變化范圍、梯度幅值的變化范圍、光滑度的變化,認為添加BN層后,損失函式的landscape(loss surface)變得更平滑,相比高低不平上下起伏的loss surface,平滑loss surface的梯度預測性更好,可以選取較大的步長,如下圖所示,

    https://arxiv.org/abs/1805.11604

  • BN更有利于梯度下降,論文An empirical analysis of the optimization of deep network loss surfaces中,繪制了VGG和NIN網路在有無BN層的情況下,loss surface的差異,包含初始點位置以及不同優化演算法最終收斂到的local minima位置,如下圖所示,沒有BN層的,其loss surface存在較大的高原,有BN層的則沒有高原,而是山峰,因此更容易下降,

    https://arxiv.org/abs/1612.04010

  • 這里再提供一個直覺上的理解,沒有BN層的情況下,網路沒辦法直接控制每層輸入的分布,其分布前面層的權重共同決定,或者說分布的均值和方差“隱藏”在前面層的每個權重中,網路若想調整其分布,需要通過復雜的反向傳播程序調整前面的每個權重實作,BN層的存在相當于將分布的均值和方差從權重中剝離了出來,只需調整\(\gamma\)\(\beta\)兩個引數就可以直接調整分布,讓分布和權重的配合變得更加容易,

這里多說一句,論文How Does Batch Normalization Help Optimization中對比了標準VGG以及加了BN層的VGG每層分布隨訓練程序的變化,發現兩者并無明顯差異,認為BatchNorm并沒有改善 Internal Covariate Shift但這里有個問題是,兩者的訓練都可以收斂,對于不能收斂或者訓練程序十分震蕩的模型呢,其分布變化是怎樣的?我也不知道,沒做過實驗(微笑),

以上,

參考

  • arxiv-Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
  • arxiv-How Does Batch Normalization Help Optimization?
  • arxiv-An empirical analysis of the optimization of deep network loss surfaces
  • talk-How does Batch Normalization Help Optimization?
  • How does Batch Normalization Help Optimization?
  • Understanding the backward pass through Batch Normalization Layer
  • Batch Normalization — What the hey?
  • Why Does Batch Normalization Work?

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/187965.html

標籤:其他

上一篇:機器學習回顧篇(11):支持向量機(SVM)

下一篇:用PMML實作機器學習模型的跨平臺上線

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more