最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch 圖像中的數(shù)據(jù)預處理和批標準化實例

 更新時間:2020年01月15日 14:46:24   作者:xckkcxxck  
今天小編就為大家分享一篇pytorch 圖像中的數(shù)據(jù)預處理和批標準化實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

目前數(shù)據(jù)預處理最常見的方法就是中心化和標準化。

中心化相當于修正數(shù)據(jù)的中心位置,實現(xiàn)方法非常簡單,就是在每個特征維度上減去對應的均值,最后得到 0 均值的特征。

標準化也非常簡單,在數(shù)據(jù)變成 0 均值之后,為了使得不同的特征維度有著相同的規(guī)模,可以除以標準差近似為一個標準正態(tài)分布,也可以依據(jù)最大值和最小值將其轉(zhuǎn)化為 -1 ~ 1 之間

批標準化:BN

在數(shù)據(jù)預處理的時候,我們盡量輸入特征不相關(guān)且滿足一個標準的正態(tài)分布,這樣模型的表現(xiàn)一般也較好。但是對于很深的網(wǎng)路結(jié)構(gòu),網(wǎng)路的非線性層會使得輸出的結(jié)果變得相關(guān),且不再滿足一個標準的 N(0, 1) 的分布,甚至輸出的中心已經(jīng)發(fā)生了偏移,這對于模型的訓練,特別是深層的模型訓練非常的困難。

所以在 2015 年一篇論文提出了這個方法,批標準化,簡而言之,就是對于每一層網(wǎng)絡的輸出,對其做一個歸一化,使其服從標準的正態(tài)分布,這樣后一層網(wǎng)絡的輸入也是一個標準的正態(tài)分布,所以能夠比較好的進行訓練,加快收斂速度。

batch normalization 的實現(xiàn)非常簡單,接下來寫一下對應的python代碼:

import sys
sys.path.append('..')
 
import torch
 
def simple_batch_norm_1d(x, gamma, beta):
  eps = 1e-5
  x_mean = torch.mean(x, dim=0, keepdim=True) # 保留維度進行 broadcast
  x_var = torch.mean((x - x_mean) ** 2, dim=0, keepdim=True)
  x_hat = (x - x_mean) / torch.sqrt(x_var + eps)
  return gamma.view_as(x_mean) * x_hat + beta.view_as(x_mean)
   
x = torch.arange(15).view(5, 3)
gamma = torch.ones(x.shape[1])
beta = torch.zeros(x.shape[1])
print('before bn: ')
print(x)
y = simple_batch_norm_1d(x, gamma, beta)
print('after bn: ')
print(y)

測試的時候該使用批標準化嗎?

答案是肯定的,因為訓練的時候使用了,而測試的時候不使用肯定會導致結(jié)果出現(xiàn)偏差,但是測試的時候如果只有一個數(shù)據(jù)集,那么均值不就是這個值,方差為 0 嗎?這顯然是隨機的,所以測試的時候不能用測試的數(shù)據(jù)集去算均值和方差,而是用訓練的時候算出的移動平均均值和方差去代替

下面我們實現(xiàn)以下能夠區(qū)分訓練狀態(tài)和測試狀態(tài)的批標準化方法

def batch_norm_1d(x, gamma, beta, is_training, moving_mean, moving_var, moving_momentum=0.1):
  eps = 1e-5
  x_mean = torch.mean(x, dim=0, keepdim=True) # 保留維度進行 broadcast
  x_var = torch.mean((x - x_mean) ** 2, dim=0, keepdim=True)
  if is_training:
    x_hat = (x - x_mean) / torch.sqrt(x_var + eps)
    moving_mean[:] = moving_momentum * moving_mean + (1. - moving_momentum) * x_mean
    moving_var[:] = moving_momentum * moving_var + (1. - moving_momentum) * x_var
  else:
    x_hat = (x - moving_mean) / torch.sqrt(moving_var + eps)
  return gamma.view_as(x_mean) * x_hat + beta.view_as(x_mean)

下面我們在卷積網(wǎng)絡下試用一下批標準化看看效果

def data_tf(x):
  x = np.array(x, dtype='float32') / 255
  x = (x - 0.5) / 0.5 # 數(shù)據(jù)預處理,標準化
  x = torch.from_numpy(x)
  x = x.unsqueeze(0)
  return x
 
train_set = mnist.MNIST('./data', train=True, transform=data_tf, download=True) # 重新載入數(shù)據(jù)集,申明定義的數(shù)據(jù)變換
test_set = mnist.MNIST('./data', train=False, transform=data_tf, download=True)
train_data = DataLoader(train_set, batch_size=64, shuffle=True)
test_data = DataLoader(test_set, batch_size=128, shuffle=False)
# 使用批標準化
class conv_bn_net(nn.Module):
  def __init__(self):
    super(conv_bn_net, self).__init__()
    self.stage1 = nn.Sequential(
      nn.Conv2d(1, 6, 3, padding=1),
      nn.BatchNorm2d(6),
      nn.ReLU(True),
      nn.MaxPool2d(2, 2),
      nn.Conv2d(6, 16, 5),
      nn.BatchNorm2d(16),
      nn.ReLU(True),
      nn.MaxPool2d(2, 2)
    )
    
    self.classfy = nn.Linear(400, 10)
  def forward(self, x):
    x = self.stage1(x)
    x = x.view(x.shape[0], -1)
    x = self.classfy(x)
    return x
 
net = conv_bn_net()
optimizer = torch.optim.SGD(net.parameters(), 1e-1) # 使用隨機梯度下降,學習率 0.1
 
 
train(net, train_data, test_data, 5, optimizer, criterion)

以上這篇pytorch 圖像中的數(shù)據(jù)預處理和批標準化實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文讓你秒懂精通pip并快速體驗深度學習應用【建議收藏】

    一文讓你秒懂精通pip并快速體驗深度學習應用【建議收藏】

    在使用python的時候,經(jīng)常使用到pip這個工具,可以很方便的線上安裝依賴庫,當然pip還有很多參數(shù)都可以幫我們?nèi)ゲ樵円恍煨畔?這篇文章主要給大家介紹了如何通過一篇文章讓你秒懂精通pip并快速體驗深度學習應用的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 分享8點超級有用的Python編程建議(推薦)

    分享8點超級有用的Python編程建議(推薦)

    這篇文章主要介紹了分享8點超級有用的Python編程建議(推薦),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-10-10
  • python實現(xiàn)k均值算法示例(k均值聚類算法)

    python實現(xiàn)k均值算法示例(k均值聚類算法)

    這篇文章主要介紹了python實現(xiàn)k均值算法示例,簡單實現(xiàn)平面的點K均值分析,使用歐幾里得距離,并用pylab展示,需要的朋友可以參考下
    2014-03-03
  • python?abs函數(shù)用法小結(jié)

    python?abs函數(shù)用法小結(jié)

    abs()是python的內(nèi)置函數(shù),它的作用是返回一個數(shù)的絕對值,abs函數(shù)的主要用途是返回一個數(shù)的絕對值,下面通過本文給大家分享python?abs函數(shù)怎么用,感興趣的朋友一起看看吧
    2024-05-05
  • 詳解python的循環(huán)

    詳解python的循環(huán)

    這篇文章主要為大家介紹了python的循環(huán),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 使用python將圖片按標簽分入不同文件夾的方法

    使用python將圖片按標簽分入不同文件夾的方法

    今天小編就為大家分享一篇使用python將圖片按標簽分入不同文件夾的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python生成并下載文件后端代碼實例

    Python生成并下載文件后端代碼實例

    這篇文章主要介紹了Python生成并下載文件后端代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Python列表(list)、字典(dict)、字符串(string)基本操作小結(jié)

    Python列表(list)、字典(dict)、字符串(string)基本操作小結(jié)

    這篇文章主要介紹了Python列表(list)、字典(dict)、字符串(string)基本操作小結(jié),本文總結(jié)了最基本最常用的一些操作,需要的朋友可以參考下
    2014-11-11
  • python中cryptography庫的實現(xiàn)

    python中cryptography庫的實現(xiàn)

    本文主要介紹了python中cryptography庫的實現(xiàn),包括Fernet、hash、AES、RSA等加密算法的使用,具有一定的參加價值,感興趣的可以了解一下
    2025-01-01
  • django框架之cookie/session的使用示例(小結(jié))

    django框架之cookie/session的使用示例(小結(jié))

    這篇文章主要介紹了django框架之cookie/session的使用示例(小結(jié)),詳細的介紹了cookie和session技術(shù)的接口獲取等問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10

最新評論

满城县| 喀喇沁旗| 富锦市| 五原县| 商丘市| 扎鲁特旗| 分宜县| 潜江市| 西安市| 肃北| 克什克腾旗| 济宁市| 屏山县| 平安县| 佛学| 南皮县| 萍乡市| 宁城县| 河间市| 石嘴山市| 安国市| 聂拉木县| 安西县| 海丰县| 瑞金市| 体育| 罗江县| 铜山县| 克拉玛依市| 江津市| 辉县市| 承德县| 平远县| 清徐县| 仁化县| 高邑县| 新津县| 清水河县| 玛多县| 新安县| 镇安县|