色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

教你如何搭建淺層神經網絡"Hello world"

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-10 18:35 ? 次閱讀
作為圖像識別與機器視覺界的 "hello world!" ,
MNIST ("Modified National Institute of Standards and Technology")
數據集有著舉足輕重的地位。基本上每本人工智能機器學習相關的書上都以它作為開始。

下面我們會用 TensorFlow 搭建一個淺層的神經網絡來運行 "hello world!" 模型。 以下內容和模塊的運算,均在矩池云平臺進行。

本次教程分五步:

第一步:數據預處理,包括提取數據標簽、查看圖片數據、數據可視化、查看數據是否平衡等

第二步:數據加載,打亂數據集

第三步:構建模型,簡單介紹網絡卷積模型和激活函數,定義訓練函數和學習率

第四步:模型訓練,查看訓練過程和結果,使用圖表查看模型精確度和學習率變化

第五步:嘗試提升精準度,不斷探索和優化

在搭建開始前,我們需要加載以下對應的模塊:

第一步:數據預處理

1.1查看數據標簽

在任何模型建立之前,應當優先查看數據的情況。例如數據集的大小、訓練集和測試集的數據數量、標簽的數據數量分布等。
下方為訓練集和測試集的數據查看代碼:

train = pd.read_csv('mnist/mnist_train.csv') # read train
test = pd.read_csv('mnist/mnist_test.csv') # read train

下方為訓練集和測試集的數量結果:

train.shape   (6000,785)
test.shape    (10000,785)

我們可以看到 train 訓練集里面有6000條數據,test 測試集里面有10000條數據,兩個測試集每行都有785個數據。

接下來,我們來看下數據集的預覽:其中第一列是標簽列,剩余784列則為像素點數據,由該784列數據組成一張28*28的像素圖片。

1.2 提取數據標簽

接下來,我們進行數據標簽的提取和處理。先來看下標簽數據的提取代碼:

train_labels = np.array(train.pop('label'))
test_labels = np.array(test.pop('label'))

查看標簽種類,我們可以看出標簽表示了從0~9的數字,沒有其他的錯誤數據。

由于運算需要,我們需要將一維的圖片數據轉換成二維圖片數據。將圖片數據轉換成長28,寬28,通道為1的格式,方便卷積計算。

第二步:數據可視化

2.1 隨機生成數據匹配

現在隨機選取一些我們已經轉換好的圖片數據,用 matplot 來查看下標簽和圖片是否能夠對上。

方框內是隨機生成的一些非規則寫法,圖片上方正中間則為對應的數字。

2.2 查看數據是否平衡

分類器的設計都是基于類分布大致平衡這一假設,通常假定用于訓練的數據是平衡的,即各類所含樣本數大致相當。

下面我們來看下標簽的分布情況,查看每個標簽種類的數據量是否分布均勻。

在 MINST 數據集中,我們的數據是處于一個均勻分布的狀態。

sns.distplot(train_labels, kde=False, bins=10)

2.3 數據加載

在建立模型之前,我們需要先定義一些常量:

# 圖像寬度
width = 28
# 圖像高度
height = 28
# batch size
batch_size = 100
# 訓練圖片數量
train_images_num = train.shape[0]

下一步,我們為模型建立數據集。TensorFlow 提供了 Dataset 類可以方便加載訓練的數據,使用方式為 tf.data.Dataset。

其中,訓練集的數據,我們進行了隨機打亂。

train = tf.cast(train, tf.float32)
test = tf.cast(test, tf.float32)
train_ds = tf.data.Dataset.from_tensor_slices((train, train_labels)).shuffle(train_images_num).batch(batch_size)
test_ds = tf.data.Dataset.from_tensor_slices((test, test_labels)).batch(batch_size)

第三步:模型構建

3.1 構建模型的網絡層次結構

數字識別作為入門工程,我們的模型也會相對的簡單。當前構建模型,采用了以下幾層網絡層次結構:

  • 第一層二維卷積層
  • Flatten 層:這層的作用是將第一層的卷積曾平坦壓縮成一維,常用在從卷積層到全連接曾的過度,當然 Flatten 不影響 batch 的大小
  • Dense 層:全連接神經網絡層
  • Dense 層:全連接神經網絡層

每一層對應的激活函數如下:

  • 第一層使用 ReLU 函數
  • Flatten 層( 無 )
  • Dense 層 ReLU 函數
  • Dense 層使用 softmax 損失函數進行輸出

3.2 關于激活函數的解釋說明

ReLU函數

ReLU 函數全名為線性整流函數(Rectified Linear Unit, ReLU),又稱修正線性單元,是一種人工神經網絡中常用的激活函數(activation function),通常指代以斜坡函數及其變種為代表的非線性函數。

從函數的表達可以看出,函數抑制了比 0 小的輸入,這個激活函數有以下特點:

  • 收斂快
  • 在[ 0, x ]區間內不會飽和,即它可以對抗梯度消失問題
  • 求導簡單,也就是它的計算效率很高

softmax 函數

softmax 用于多分類過程中,它將多個神經元的輸出映射到(0,1)區間內,可以看成概率來理解,從而來進行多分類。

我們來看下它的數學表達式,假設我們有一個數組,?V,??Vi 表示 ?V 中的第 ?i 個元素,那么這個元素的 softmax 值就是:

在我們的數字識別的模型中,我們將最后的輸出成一個10個元素的數組,數組從0下標開始到9,分別表示對應的標簽。

然后對這個輸出進行 softmax 計算,取出 softmax 值最大的那個元素對應的標簽作為我們的分類結果。

class MNIST(Model):
  def __init__(self):
    super(MNIST, self).__init__()
    self.conv1 = Conv2D(width, 3, activation='relu')
    self.flatten = Flatten()
    self.d1 = Dense(128, activation='relu')
    self.d2 = Dense(10, activation='softmax')

  def call(self, x):
    x = self.conv1(x)
    x = self.flatten(x)
    x = self.d1(x)
    return self.d2(x)

model = MNIST()
model.build(input_shape=train.shape

3.3 查看模型的構建情況

本文利用 summary 接口來查看模型的情況,可以看到我們的每層網絡的類型、輸出、參數的個數,最下面還是統計了可訓練參數,全部參數的情況。

我們選用交叉熵函數作為我們的損失函數,基本公式如下:

batch 公式:

用隨機梯度下降算法作為我們的優化器:

loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer = tf.keras.optimizers.SGD()
train_loss = tf.keras.metrics.Mean(name='train_loss')
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy')

test_loss = tf.keras.metrics.Mean(name='test_loss')
test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='test_accuracy')

定義 train_step 函數:

@tf.function
def train_step(images, labels):
    with tf.GradientTape() as tape:
        predictions = model(images)
        loss = loss_object(labels, predictions)
    gradients = tape.gradient(loss, model.trainable_variables)
    optimizer.apply_gradients(zip(gradients, model.trainable_variables))

    train_loss(loss)
    train_accuracy(labels, predictions)

定義 test_step 函數:

@tf.function
def test_step(images, labels):
    predictions = model(images)
    t_loss = loss_object(labels, predictions)
    test_loss(t_loss)
    test_accuracy(labels, predictions)

一般情況下,學習率 ( learning rate ) 不適合設置為常數。在訓練不斷迭代的情況下,常量的學習率會導致模型收斂性變差。

在不斷的迭代過程中,損失函數 ( loss ) 越來越小,因此我們希望學習率也越來越小,從而能夠讓模型收斂到一個更好的局部最優點。

這里我們簡單的讓學習率在每 epoch 中都以一定大小遞減。

def lr_fn(epoch, lr):
    if epoch == 0:
        return 0.001
    
    return lr * 0.9

設定一個較大的 epoch,我們在模型訓練的時候做了 early stop 策略。當訓練精度小于上一次 epoch 的精度,我們認為模型進入了過擬合了。

我們會停止訓練這個也是一種防止過擬合的策略。

第四步:模型訓練

我們在訓練中記錄下了每一次 epoch 的訓練集和測試集精度的統計以及學習率,為了訓練完成后查看訓練過程的效果。

我們可以看到的訓練結果:

然后我們把訓練中的記錄下來的訓練集和測試集的精確度結果放到圖表中,用以查看我們的訓練情況:綠色為測試集曲線,藍色為訓練集曲線。

plt.plot(epoch_range, train_accuracy_total, '-b', label= "training")
plt.plot(epoch_range, test_accuracy_total, '-g', label= "test")
plt.legend()
plt.xlabel('epoch')
plt.ylabel('accuracy')

從圖表中可以看出,在經過不斷的 epoch 迭代以后,模型的精度在開始的幾個 epoch 后迅速提升(這表示收斂速度很快)。后面的幾個 epoch 模型的精度曲線趨向于平穩,收斂速度放緩。

查看學習率的遞減情況:

plt.plot(epoch_range, lr_total, '-b', label= "training")
plt.legend()
plt.xlabel('epoch')
plt.ylabel('learning rate')

第五步:探索和優化

后續讀者可以從以下這幾個方面來進行嘗試,嘗試提高模型的準確率。

  • 更深的網絡層次,可以更換模型,比如使用 VGG16,ResNet 等更深的網絡,或者在現有的網絡中添加更多的卷積層進行嘗試
  • 更多的訓練數據,數據量的增長能極大的提高模型的精度跟泛化能力
  • 使用別的優化器,比如:adam
  • 調整學習率

矩池云現在已經全線上架 “機器圖像識別” 鏡像;

選擇 “ 圖像識別demo ” 鏡像,機器啟動后,在 JupyterLab 目錄中選擇

digit-recognizer 文件夾,矩池云已經將數據集和腳本都集成在其中,執行其中的 ipynb 文件,即可運行上述識別腳本。

審核編輯 黃昊宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 人工智能
    +關注

    關注

    1792

    文章

    47411

    瀏覽量

    238926
  • 人工神經網絡

    關注

    1

    文章

    119

    瀏覽量

    14644
  • 機器學習
    +關注

    關注

    66

    文章

    8424

    瀏覽量

    132766
  • python
    +關注

    關注

    56

    文章

    4799

    瀏覽量

    84810
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60540
收藏 人收藏

    評論

    相關推薦

    人工神經網絡原理及下載

    這個網絡輸入和相應的輸出來“訓練”這個網絡網絡根據輸入和輸出不斷地調節自己的各節點之間的權值來滿足輸入和輸出。這樣,當訓練結束后,我們給定一個輸入,網絡便會根據自己已調節好的權值計算
    發表于 06-19 14:40

    基于labview的BP人工神經網絡曲線擬合小程序

    `點擊學習>>《龍哥手把手教你學LabVIEW視覺設計》視頻教程用LabVIEW實現的BP人工神經網絡曲線擬合,感謝LabVIEW的矩陣運算函數,程序流程較
    發表于 12-13 16:41

    【PYNQ-Z2試用體驗】基于PYNQ的神經網絡自動駕駛小車-搭建神經網絡

    在之前的帖子中,我們完成了神經網絡自動駕駛小車的硬件搭建與底盤控制。當小車通過WiFi無線連接到網絡后,已經可以對其進行遠程操控,成為一輛無線遙控小車,但是這還不夠,本講我們將為它搭建
    發表于 03-09 22:10

    輕量化神經網絡的相關資料下載

    原文鏈接:【嵌入式AI部署&基礎網絡篇】輕量化神經網絡精述--MobileNet V1-3、ShuffleNet V1-2、NasNet深度神經網絡模型被廣泛應用在圖像分類、物
    發表于 12-14 07:35

    用CubeAI導入神經網絡報錯N-dimensional?tensors?not?supported?with?N?>?怎么解決?

    用CubeAI導入神經網絡報錯N-dimensional tensors not supported with N > 5,但是用的只是傳統的CNN網絡
    發表于 08-07 14:26

    Keras搭建神經網絡的一般步驟

    參考https://keras.io/zh/ 的安裝指引。 2 使用Keras搭建神經網絡的步驟 2 示例 搭建一個最簡單的手寫數字識別MNIST step1:選擇順序模型并初始化 model
    發表于 08-18 07:35

    AVR入門:怎么樣由AVR USART實現發送"Hello World!"

    AVR入門: 由AVR USART發送"Hello World!" (#20)
    的頭像 發表于 07-08 11:05 ?2637次閱讀

    基于改進郊狼優化算法的淺層神經網絡進化

    基于改進郊狼優化算法的淺層神經網絡進化
    發表于 06-24 15:40 ?15次下載

    "STM32F0 Error: Flash Download failed - ""Cortex-M0""解決"

    開發工具CUbemx + Keil uVision5(MDK V5)錯誤現象在STM32F0燒錄程序是出現了Error: Flash Download failed - &quot
    發表于 12-01 12:06 ?33次下載
    &<b class='flag-5'>quot</b>;STM32F0 Error: Flash Download failed  -  &<b class='flag-5'>quot</b>;&<b class='flag-5'>quot</b>;Cortex-M0&<b class='flag-5'>quot</b>;&<b class='flag-5'>quot</b>;解決&<b class='flag-5'>quot</b>;

    低壓空氣斷路器World Super AE V Series&amp;quot; 喜獲 &amp;quot;2021 R&amp;amp;D 100 Awards

    低壓空氣斷路器World Super AE V Series C-class 作為工廠和建筑等低壓受配電設備的主干斷路器,因其創新性技術研發,喜獲 2021 R&amp;D 100 Awards
    發表于 02-10 14:38 ?1298次閱讀
    低壓空氣斷路器<b class='flag-5'>World</b> Super AE V Series&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>; 喜獲 &<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;2021 R&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;D 100 Awards

    谷歌教你用&amp;quot;注意力&amp;quot;提升產品體驗

    之前的模型大多利用手工制作的視覺線索特征,如顏色/亮度對比度、邊緣和形狀等,最近也有一些方法轉向基于深度神經網絡來自動學習判別特征,使用的模型包括卷積、遞歸神經網絡以及視覺Transformer網絡等。
    的頭像 發表于 06-27 14:37 ?437次閱讀
    谷歌<b class='flag-5'>教你</b>用&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;注意力&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;提升產品體驗

    芯片工藝的&amp;quot;7nm&amp;quot; 、&amp;quot;5nm&amp;quot;到底指什么?

    近幾年,芯片產業越來越火熱,一些行業內的術語大家也聽得比較多了。那么工藝節點、制程是什么,&quot;7nm&quot; 、&quot;5nm&quot;又是指什么?
    的頭像 發表于 07-28 17:34 ?8511次閱讀
    芯片工藝的&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;7nm&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>; 、&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;5nm&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;到底指什么?

    卷積神經網絡模型搭建

    卷積神經網絡模型搭建 卷積神經網絡模型是一種深度學習算法。它已經成為了計算機視覺和自然語言處理等各種領域的主流算法,具有很大的應用前景。本篇文章將詳細介紹卷積神經網絡模型的
    的頭像 發表于 08-21 17:11 ?973次閱讀

    R&amp;amp;S攜手Skylo Technologies增強非地面網絡(NTN)測試服務

    羅德與施瓦茨(以下簡稱&quot;R&amp;S公司&quot;)攜手Skylo Technologies打造用于Skylo非地面網絡(NTN)的設備驗收方案。
    的頭像 發表于 10-20 09:50 ?725次閱讀

    全方位精準測量技術助力:中國經濟加力發展向前&amp;amp;quot;進&amp;amp;quot;

    全方位精準測量技術助力:中國經濟加力發展向前&quot;進&quot;
    的頭像 發表于 07-15 09:53 ?376次閱讀
    全方位精準測量技術助力:中國經濟加力發展向前&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;進&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;
    主站蜘蛛池模板: 国产午夜一级淫片| 伦理片午夜在线视频| 日本成熟bbxxxxxxxx| 色婷婷激情AV精品影院| 丰满的美女射精动态图| 亚洲国产精品线在线观看| 国产3级在线观看| 亚洲 中文 自拍 无码| 久久久久亚洲| YELLOW免费观看完整视频| 美女乱草鲍高清照片| 伊人久久天堂| 欧美精品成人a多人在线观看| 中文中幕无码亚洲在线| 久久国产免费| 99热这里只有精品9| 天美麻豆成人AV精品视频| 回复术士勇者免费观看全集| 无码日韩人妻精品久久蜜桃入口| 粉嫩自拍 偷拍 亚洲| 亚洲成AV人片一区二区不卡 | 亚洲成人免费| 男女一边摸一边做羞羞的事情免费| 51国产午夜精品免费视频| 久久最新地址获取| 一品道门在线视频| 精品亚洲国产熟女福利自在线 | 男人插曲女人下生免费大全| 高h乱np甄宓| 在线中文字幕| 性派对xxxhd| 男人免费网站| 精品久久久久中文字幕日本| www黄色大片| 在线播放午夜理论片| 色偷偷在线视频| 美娇妻的性奴史1一4| JK白丝校花爽到娇喘视频| 亚洲女人网| 台湾果冻传媒在线观看| 狠狠色狠狠色88综合日日91|