91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用TensorFlow框架演示了卷積神經(jīng)網(wǎng)絡(luò)在MNIST數(shù)據(jù)集上的應(yīng)用

zhKF_jqr_AI ? 來(lái)源:未知 ? 作者:李倩 ? 2018-08-27 09:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Google產(chǎn)品分析Zlatan Kremonic介紹了卷積神經(jīng)網(wǎng)絡(luò)的機(jī)制,并使用TensorFlow框架演示了卷積神經(jīng)網(wǎng)絡(luò)在MNIST數(shù)據(jù)集上的應(yīng)用。

卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一種前饋人工神經(jīng)網(wǎng)絡(luò),其神經(jīng)元連接模擬了動(dòng)物的視皮層。在圖像分類之類的計(jì)算機(jī)視覺任務(wù)中,CNN特別有用;不過(guò),CNN也可以應(yīng)用于其他機(jī)器學(xué)習(xí)任務(wù),只要該任務(wù)中至少一維上的屬性的順序?qū)Ψ诸惗允潜夭豢缮俚摹@?,CNN也用于自然語(yǔ)言處理和音頻分析。

CNN的主要組成部分是卷積層(convolutional layer)、池化層(pooling layer)、ReLU層(ReLU layer)、全連接層(fully connected layer)。

圖片來(lái)源:learnopencv.com

卷積層

卷積層從原輸入的三維版本開始,一般是包括色彩、寬度、高度三維的圖像。接著,圖像被分解為過(guò)濾器(核)的子集,每個(gè)過(guò)濾器的感受野均小于圖像總體。這些過(guò)濾器接著沿著輸入量的寬高應(yīng)用卷積,計(jì)算過(guò)濾器項(xiàng)和輸入的點(diǎn)積,并生成過(guò)濾器的二維激活映射。這使得網(wǎng)絡(luò)學(xué)習(xí)因?yàn)閭蓽y(cè)到輸入的空間位置上特定種類的特征而激活的過(guò)濾器。過(guò)濾器沿著整個(gè)圖像進(jìn)行“掃描”,這讓CNN具有平移不變性,也就是說(shuō),CNN可以處理位于圖像不同部分的物體。

接著疊加激活函數(shù),這構(gòu)成卷積層輸出的深度。輸出量中的每一項(xiàng)因此可以視作查看輸入的一小部分的神經(jīng)元的輸出,同一激活映射中的神經(jīng)元共享參數(shù)。

卷積層的一個(gè)關(guān)鍵概念是局部連通性,每個(gè)神經(jīng)元僅僅連接到輸入量中的一小部分。過(guò)濾器的尺寸,也稱為感受野,是決定連通程度的關(guān)鍵因素。

其他關(guān)鍵參數(shù)是深度、步長(zhǎng)、補(bǔ)齊。深度表示創(chuàng)建的特征映射數(shù)目。步長(zhǎng)控制每個(gè)卷積核在圖像上移動(dòng)的步幅。一般將步長(zhǎng)設(shè)為1,從而導(dǎo)向高度重疊的感受野和較大的輸出量。補(bǔ)齊讓我們可以控制輸出量的空間大小。如果我們用零補(bǔ)齊(zero-padding),它能提供和輸入量等高等寬的輸出。

圖片來(lái)源:gabormelli.com

池化層

池化是一種非線性下采樣的形式,讓我們可以在保留最重要的特征的同時(shí)削減卷積輸出。最常見的池化方法是最大池化,將輸入圖像(這里是卷積層的激活映射)分區(qū)(無(wú)重疊的矩形),然后每區(qū)取最大值。

池化的關(guān)鍵優(yōu)勢(shì)之一是降低參數(shù)數(shù)量和網(wǎng)絡(luò)的計(jì)算量,從而緩解過(guò)擬合。此外,由于池化去除了特定特征的精確位置的信息,但保留了該特征相對(duì)其他特征的位置信息,結(jié)果也提供了平移不變性。

最常見的池化大小是2 x 2(步長(zhǎng)2),也就是從輸入映射中去除75%的激活。

圖片來(lái)源:Leonardo Araujo dos Santos

ReLU層

修正線性單元(Rectifier Linear Unit)層應(yīng)用如下激活函數(shù)

至池化層的輸出。它在不影響卷積層的感受野的前提下增加了整個(gè)網(wǎng)絡(luò)的非線性。當(dāng)然,我們也可以應(yīng)用其他標(biāo)準(zhǔn)的非線性激活函數(shù),例如tanh和sigmoid。

圖片來(lái)源:hashrocket.com

全連接層

獲取ReLU層的輸出,將其扁平化為單一向量,以便調(diào)節(jié)權(quán)重。

圖片來(lái)源:machinethink.net

使用TensorFlow在MNIST數(shù)據(jù)集上訓(xùn)練CNN

下面我們將展示如何在MNIST數(shù)據(jù)集上使用TensorFlow訓(xùn)練CNN,并達(dá)到接近99%的精確度。

首先導(dǎo)入需要的庫(kù):

import numpy as np

import tensorflow as tf

import matplotlib.pyplot as plt

import pandas as pd

import os

from datetime import datetime

from sklearn.utils import shuffle

編寫提供錯(cuò)誤率和預(yù)測(cè)響應(yīng)矩陣的基本輔助函數(shù):

def y2indicator(y):

N = len(y)

y = y.astype(np.int32)

ind = np.zeros((N, 10))

for i in range(N):

ind[i, y[i]] = 1

return ind

def error_rate(p, t):

return np.mean(p != t)

接下來(lái),我們加載數(shù)據(jù),歸一化并重整數(shù)據(jù),并生成訓(xùn)練集和測(cè)試集。

data = pd.read_csv(os.path.join('Data', 'train.csv'))

def get_normalized_data(data):

data = data.as_matrix().astype(np.float32)

np.random.shuffle(data)

X = data[:, 1:]

mu = X.mean(axis=0)

std = X.std(axis=0)

np.place(std, std == 0, 1)

X = (X - mu) / std

Y = data[:, 0]

return X, Y

X, Y = get_normalized_data(data)

X = X.reshape(len(X), 28, 28, 1)

X = X.astype(np.float32)

Xtrain = X[:-1000,]

Ytrain = Y[:-1000]

Xtest = X[-1000:,]

Ytest = Y[-1000:]

Ytrain_ind = y2indicator(Ytrain)

Ytest_ind = y2indicator(Ytest)

在我們的卷積函數(shù)中,我們?nèi)〔介L(zhǎng)為一,并通過(guò)設(shè)定padding為SAME確保卷積輸出的維度和輸入的維度相等。下采樣系數(shù)為二,在輸出上應(yīng)用ReLU激活函數(shù):

def convpool(X, W, b):

conv_out = tf.nn.conv2d(X, W, strides=[1, 1, 1, 1], padding='SAME')

conv_out = tf.nn.bias_add(conv_out, b)

pool_out = tf.nn.max_pool(conv_out, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

return tf.nn.relu(pool_out)

初始化權(quán)重的方式是隨機(jī)正態(tài)分布取樣/sqrt(扇入+扇出)。這里的關(guān)鍵是隨機(jī)權(quán)重的方差受限于數(shù)據(jù)集大小。

def init_filter(shape, poolsz):

w = np.random.randn(*shape) / np.sqrt(np.prod(shape[:-1]) + shape[-1]*np.prod(shape[:-2] / np.prod(poolsz)))

return w.astype(np.float32)

我們定義梯度下降參數(shù),包括迭代數(shù),batch尺寸,隱藏層數(shù)量,分類數(shù)量,池尺寸。

max_iter = 6

print_period = 10

N = Xtrain.shape[0]

batch_sz = 500

n_batches = N / batch_sz

M = 500

K = 10

poolsz = (2, 2)

初始化過(guò)濾器,注意TensorFlow的維度順序。

W1_shape = (5, 5, 1, 20) # (filter_width, filter_height, num_color_channels, num_feature_maps)

W1_init = init_filter(W1_shape, poolsz)

b1_init = np.zeros(W1_shape[-1], dtype=np.float32) # one bias per output feature map

W2_shape = (5, 5, 20, 50) # (filter_width, filter_height, old_num_feature_maps, num_feature_maps)

W2_init = init_filter(W2_shape, poolsz)

b2_init = np.zeros(W2_shape[-1], dtype=np.float32)

W3_init = np.random.randn(W2_shape[-1]*7*7, M) / np.sqrt(W2_shape[-1]*7*7 + M)

b3_init = np.zeros(M, dtype=np.float32)

W4_init = np.random.randn(M, K) / np.sqrt(M + K)

b4_init = np.zeros(K, dtype=np.float32)

接著,我們定義輸入變量和目標(biāo)變量,以及將在訓(xùn)練過(guò)程中更新的變量:

X = tf.placeholder(tf.float32, shape=(batch_sz, 28, 28, 1), name='X')

T = tf.placeholder(tf.float32, shape=(batch_sz, K), name='T')

W1 = tf.Variable(W1_init.astype(np.float32))

b1 = tf.Variable(b1_init.astype(np.float32))

W2 = tf.Variable(W2_init.astype(np.float32))

b2 = tf.Variable(b2_init.astype(np.float32))

W3 = tf.Variable(W3_init.astype(np.float32))

b3 = tf.Variable(b3_init.astype(np.float32))

W4 = tf.Variable(W4_init.astype(np.float32))

b4 = tf.Variable(b4_init.astype(np.float32))

定義前向傳播過(guò)程,然后使用RMSProp加速梯度下降過(guò)程。

Z1 = convpool(X, W1, b1)

Z2 = convpool(Z1, W2, b2)

Z2_shape = Z2.get_shape().as_list()

Z2r = tf.reshape(Z2, [Z2_shape[0], np.prod(Z2_shape[1:])])

Z3 = tf.nn.relu( tf.matmul(Z2r, W3) + b3 )

Yish = tf.matmul(Z3, W4) + b4

cost = tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(logits = Yish, labels = T))

train_op = tf.train.RMSPropOptimizer(0.0001, decay=0.99, momentum=0.9).minimize(cost)

# 用于計(jì)算錯(cuò)誤率

predict_op = tf.argmax(Yish, 1)

我們使用標(biāo)準(zhǔn)的訓(xùn)練過(guò)程,不過(guò),當(dāng)在測(cè)試集上做出預(yù)測(cè)時(shí),由于RAM限制我們需要固定輸入尺寸;因此,我們加入的計(jì)算總代價(jià)和預(yù)測(cè)的函數(shù)稍微有點(diǎn)復(fù)雜。

t0 = datetime.now()

LL = []

init = tf.initialize_all_variables()

with tf.Session() as session:

session.run(init)

for i in range(int(max_iter)):

for j in range(int(n_batches)):

Xbatch = Xtrain[j*batch_sz:(j*batch_sz + batch_sz),]

Ybatch = Ytrain_ind[j*batch_sz:(j*batch_sz + batch_sz),]

if len(Xbatch) == batch_sz:

session.run(train_op, feed_dict={X: Xbatch, T: Ybatch})

if j % print_period == 0:

test_cost = 0

prediction = np.zeros(len(Xtest))

for k in range(int(len(Xtest) / batch_sz)):

Xtestbatch = Xtest[k*batch_sz:(k*batch_sz + batch_sz),]

Ytestbatch = Ytest_ind[k*batch_sz:(k*batch_sz + batch_sz),]

test_cost += session.run(cost, feed_dict={X: Xtestbatch, T: Ytestbatch})

prediction[k*batch_sz:(k*batch_sz + batch_sz)] = session.run(

predict_op, feed_dict={X: Xtestbatch})

err = error_rate(prediction, Ytest)

if j == 0:

print("Cost / err at iteration i=%d, j=%d: %.3f / %.3f" % (i, j, test_cost, err))

LL.append(test_cost)

print("Elapsed time:", (datetime.now() - t0))

plt.plot(LL)

plt.show()

輸出:

Cost / err at iteration i=0, j=0: 2243.417 / 0.805

Cost / err at iteration i=1, j=0: 116.821 / 0.035

Cost / err at iteration i=2, j=0: 78.144 / 0.029

Cost / err at iteration i=3, j=0: 57.462 / 0.018

Cost / err at iteration i=4, j=0: 52.477 / 0.015

Cost / err at iteration i=5, j=0: 48.527 / 0.018

Elapsed time: 0:09:16.157494

結(jié)語(yǔ)

如我們所見,模型在測(cè)試集上的表現(xiàn)在98%到99%之間。在這個(gè)練習(xí)中,我們沒(méi)有進(jìn)行任何超參數(shù)調(diào)整,但這是很自然的下一步。我們也可以增加正則化、動(dòng)量、dropout。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:卷積神經(jīng)網(wǎng)絡(luò)簡(jiǎn)明教程

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【瑞薩AI挑戰(zhàn)賽】手寫數(shù)字識(shí)別模型RA8P1 Titan Board的部署

    MNIST數(shù)據(jù)集訓(xùn)練,選擇輕量級(jí)卷積神經(jīng)網(wǎng)絡(luò)作為基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu),兼顧模型精度與端側(cè)部署的輕量化要求,避免因模型過(guò)大導(dǎo)致RA8P1開發(fā)板的內(nèi)存
    發(fā)表于 03-15 20:42

    自動(dòng)駕駛中常提的卷積神經(jīng)網(wǎng)絡(luò)是個(gè)啥?

    自動(dòng)駕駛領(lǐng)域,經(jīng)常會(huì)聽到卷積神經(jīng)網(wǎng)絡(luò)技術(shù)。卷積神經(jīng)網(wǎng)絡(luò),簡(jiǎn)稱為CNN,是一種專門用來(lái)處理網(wǎng)格狀數(shù)據(jù)
    的頭像 發(fā)表于 11-19 18:15 ?2119次閱讀
    自動(dòng)駕駛中常提的<b class='flag-5'>卷積</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>是個(gè)啥?

    CNN卷積神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)原理及MCU200T仿真測(cè)試

    數(shù)的提出很大程度的解決BP算法優(yōu)化深層神經(jīng)網(wǎng)絡(luò)時(shí)的梯度耗散問(wèn)題。當(dāng)x&gt;0 時(shí),梯度恒為1,無(wú)梯度耗散問(wèn)題,收斂快;當(dāng)x&lt;0 時(shí),該層的輸出為0。 CNN
    發(fā)表于 10-29 07:49

    NMSISI庫(kù)的使用

    :   神經(jīng)網(wǎng)絡(luò)卷積函數(shù)   神經(jīng)網(wǎng)絡(luò)激活函數(shù)   全連接層函數(shù)   神經(jīng)網(wǎng)絡(luò)池化函數(shù)   Softmax 函數(shù)   神經(jīng)網(wǎng)絡(luò)支持功能
    發(fā)表于 10-29 07:07

    NMSIS神經(jīng)網(wǎng)絡(luò)庫(kù)使用介紹

    :   神經(jīng)網(wǎng)絡(luò)卷積函數(shù)   神經(jīng)網(wǎng)絡(luò)激活函數(shù)   全連接層函數(shù)   神經(jīng)網(wǎng)絡(luò)池化函數(shù)   Softmax 函數(shù)   神經(jīng)網(wǎng)絡(luò)支持功能
    發(fā)表于 10-29 06:08

    構(gòu)建CNN網(wǎng)絡(luò)模型并優(yōu)化的一般化建議

    整個(gè)模型非常巨大。所以要想實(shí)現(xiàn)輕量級(jí)的CNN神經(jīng)網(wǎng)絡(luò)模型,首先應(yīng)該避免嘗試單層神經(jīng)網(wǎng)絡(luò)。 2)減少卷積核的大小:CNN神經(jīng)網(wǎng)絡(luò)是通過(guò)權(quán)值共享的方式,利用
    發(fā)表于 10-28 08:02

    卷積運(yùn)算分析

    數(shù)據(jù),故設(shè)計(jì)ConvUnit模塊實(shí)現(xiàn)單個(gè)感受域規(guī)模的卷積運(yùn)算. 卷積運(yùn)算:不同于數(shù)學(xué)當(dāng)中提及到的卷積概念,CNN
    發(fā)表于 10-28 07:31

    Ubuntu20.04系統(tǒng)中訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的一些經(jīng)驗(yàn)

    模型。 我們使用MNIST數(shù)據(jù),訓(xùn)練一個(gè)卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型,用于手寫數(shù)字識(shí)別。一旦模型被訓(xùn)練并保存,就可以用于對(duì)新圖像進(jìn)行推理和預(yù)
    發(fā)表于 10-22 07:03

    CICC2033神經(jīng)網(wǎng)絡(luò)部署相關(guān)操作

    完成神經(jīng)網(wǎng)絡(luò)量化后,需要將神經(jīng)網(wǎng)絡(luò)部署到硬件加速器。首先需要將所有權(quán)重數(shù)據(jù)以及輸入數(shù)據(jù)導(dǎo)入到
    發(fā)表于 10-20 08:00

    液態(tài)神經(jīng)網(wǎng)絡(luò)(LNN):時(shí)間連續(xù)性與動(dòng)態(tài)適應(yīng)性的神經(jīng)網(wǎng)絡(luò)

    神經(jīng)元,但卻能產(chǎn)生復(fù)雜的行為。受此啟發(fā),與傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)相比,LNN旨在通過(guò)模擬大腦中神經(jīng)元之間的動(dòng)態(tài)連接來(lái)處理信息,這種網(wǎng)絡(luò)能夠順序處理數(shù)據(jù)
    的頭像 發(fā)表于 09-28 10:03 ?1354次閱讀
    液態(tài)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>(LNN):時(shí)間連續(xù)性與動(dòng)態(tài)適應(yīng)性的<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    神經(jīng)網(wǎng)絡(luò)的并行計(jì)算與加速技術(shù)

    問(wèn)題。因此,并行計(jì)算與加速技術(shù)神經(jīng)網(wǎng)絡(luò)研究和應(yīng)用中變得至關(guān)重要,它們能夠顯著提升神經(jīng)網(wǎng)絡(luò)的性能和效率,滿足實(shí)際應(yīng)用中對(duì)快速響應(yīng)和大規(guī)模數(shù)據(jù)處理的需求。
    的頭像 發(fā)表于 09-17 13:31 ?1184次閱讀
    <b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的并行計(jì)算與加速技術(shù)

    卷積神經(jīng)網(wǎng)絡(luò)如何監(jiān)測(cè)皮帶堵料情況 #人工智能

    卷積神經(jīng)網(wǎng)絡(luò)
    jf_60804796
    發(fā)布于 :2025年07月01日 17:08:42

    神經(jīng)網(wǎng)絡(luò)專家系統(tǒng)電機(jī)故障診斷中的應(yīng)用

    的診斷誤差。仿真結(jié)果驗(yàn)證該算法的有效性。 純分享帖,需要者可點(diǎn)擊附件免費(fèi)獲取完整資料~~~*附件:神經(jīng)網(wǎng)絡(luò)專家系統(tǒng)電機(jī)故障診斷中的應(yīng)用.pdf【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作
    發(fā)表于 06-16 22:09

    神經(jīng)網(wǎng)絡(luò)RAS異步電機(jī)轉(zhuǎn)速估計(jì)中的仿真研究

    ,在一定程度上擴(kuò)展轉(zhuǎn)速估計(jì)范圍。 純分享帖,需要者可點(diǎn)擊附件免費(fèi)獲取完整資料~~~*附件:神經(jīng)網(wǎng)絡(luò)RAS異步電機(jī)轉(zhuǎn)速估計(jì)中的仿真研究.pdf【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者
    發(fā)表于 06-16 21:54

    自動(dòng)駕駛感知系統(tǒng)中卷積神經(jīng)網(wǎng)絡(luò)原理的疑點(diǎn)分析

    背景 卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)的核心技術(shù)主要包括以下幾個(gè)方面:局部連接、權(quán)值共享、多卷積核以及池化。這些技術(shù)共同作用,使得CNN
    的頭像 發(fā)表于 04-07 09:15 ?880次閱讀
    自動(dòng)駕駛感知系統(tǒng)中<b class='flag-5'>卷積</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>原理的疑點(diǎn)分析