日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

两层全连接神经网络实现手写数字识别

發(fā)布時(shí)間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两层全连接神经网络实现手写数字识别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一,思路:
分為兩步,第一步是訓(xùn)練模型然后把模型保存到磁盤,第二步是復(fù)現(xiàn)模型結(jié)構(gòu)然后讀取模型權(quán)重系數(shù),輸入手寫數(shù)字圖片驗(yàn)證模型識(shí)別能力。


二,模型訓(xùn)練
在這部分使用mnist數(shù)據(jù)集,該數(shù)據(jù)集含有七萬(wàn)張28*28的灰度化的手寫數(shù)字圖片,其中六萬(wàn)張用于訓(xùn)練,一萬(wàn)張用于訓(xùn)練階段的測(cè)試。
過(guò)程分為六步:(1.)import 相關(guān)模塊 (2.)讀入訓(xùn)練集與測(cè)試集 (3.)用Sequential模型(或者有的人叫它神經(jīng)網(wǎng)絡(luò)容器)搭建神經(jīng)網(wǎng)絡(luò) (4.)定義神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)的優(yōu)化器(或者叫參數(shù)更新的方法,例如隨機(jī)梯度下降法SGD),損失函數(shù)(MSE或者交叉熵),測(cè)評(píng)指標(biāo)(用來(lái)計(jì)算損失函數(shù))(5.)訓(xùn)練模型 ,把最優(yōu)模型保存到磁盤(6.)打印訓(xùn)練總覽
代碼如下:

import tensorflow as tf import oscheckpoint_save_path = "./mnist.ckpt" # 指定模型路徑mnist = tf.keras.datasets.mnist (train_data, train_label), (test_data, test_label) = mnist.load_data() train_data = train_data / 255.0 test_data = test_data / 255.0 # 歸一化,一是神經(jīng)網(wǎng)絡(luò)對(duì)0附近敏感,二是不歸一化可能無(wú)法收斂model = tf.keras.models.Sequential([tf.keras.layers.Flatten(), # 拉直層參數(shù)可以省略,拉直層的作用是把輸入神經(jīng)網(wǎng)絡(luò)的多維數(shù)組拉直為一維數(shù)組,拉直層長(zhǎng)度是784tf.keras.layers.Dense(128, activation='relu'), # 隱藏層tf.keras.layers.Dense(10, activation='softmax') # 輸出層,軟判決輸出,輸出為概率值 ])model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),metrics=['sparse_categorical_accuracy'] )if os.path.exists(checkpoint_save_path + '.index'):print('-------------load the model-----------------')model.load_weights(checkpoint_save_path) # 從保存的模型中讀取權(quán)重系數(shù) # 如果之前并沒(méi)有存儲(chǔ)訓(xùn)練過(guò)的模型就忽略這個(gè)if語(yǔ)句塊,如果有的話就從保存的權(quán)重系數(shù)開(kāi)始訓(xùn)練,而不是隨機(jī)選取初始權(quán)重cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,save_weights_only=True,save_best_only=True)history = model.fit(train_data, train_label, batch_size=32, epochs=5, validation_data=(test_data, test_label), validation_freq=1,callbacks=[cp_callback]) # 在訓(xùn)練模型時(shí),根據(jù)callbacks=[cp_callback]的配置選擇保存模型最優(yōu)時(shí)的權(quán)重系數(shù) # history保存了訓(xùn)練階段的loss,acc以及測(cè)試階段時(shí)的loss,acc model.summary()

對(duì)于該程序的分析,還是要抓住數(shù)據(jù)結(jié)構(gòu)的變化:
剛剛讀入數(shù)據(jù)集后train_dat是三維數(shù)組,shape:(60000,28,28)。第一個(gè)維度的每個(gè)元素是一個(gè)二維數(shù)組即一張圖片的數(shù)據(jù)。train_label是一個(gè)shape為(60000)的一維數(shù)組,每個(gè)元素是一個(gè)數(shù)值即標(biāo)簽。test_data的shape(10000,28,28),test_label的shape為:(10000)。然后數(shù)據(jù)輸入神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)拉直層無(wú)運(yùn)算能力,不算層數(shù),僅僅是把多維數(shù)組拉伸為一維數(shù)組。拉伸層之后為隱藏層,具有128個(gè)神經(jīng)元,使用relu激活函數(shù)。最后是輸出層,具有十個(gè)神經(jīng)元,使用sotmax激活函數(shù)使得神經(jīng)網(wǎng)絡(luò)輸出為概率形式。
神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意圖如下:

現(xiàn)在分析數(shù)據(jù)結(jié)構(gòu)的變換:
輸入數(shù)據(jù)按32個(gè)分成一個(gè)batch,即shape:(32,28,28)。經(jīng)過(guò)拉伸層變?yōu)閟hape:(32,784)
拉直層到隱藏層的全連接權(quán)重系數(shù)矩陣shape:(784,128)。shape:(32,784)Xshape:(784,128)
得到的矩陣shape為(32,128),這就是隱藏層輸出的數(shù)據(jù)結(jié)構(gòu)。隱藏層到輸出層的全連接結(jié)系數(shù)矩陣shape:(128,10)。shape(32,128)Xshape:(128,10)=shape:(32,10),這就是輸出層數(shù)據(jù)數(shù)據(jù)的結(jié)構(gòu),一共有32行,每行是一個(gè)特征數(shù)據(jù)(輸入的待識(shí)別圖片)對(duì)于十分類的概率值,取其中概率值最大的分類對(duì)應(yīng)的標(biāo)簽作為手寫數(shù)字圖片的識(shí)別結(jié)果。

然后再來(lái)看看神經(jīng)網(wǎng)絡(luò)的權(quán)重系數(shù)參數(shù)示意(如下圖):

拉直層沒(méi)有運(yùn)算能力,沒(méi)有可訓(xùn)練參數(shù);全連接層1一共有784X128(隱藏層的系數(shù)矩陣元素?cái)?shù)目)+128(偏置項(xiàng)元素?cái)?shù)目)=100480個(gè)可訓(xùn)練參數(shù);輸出層有128X10(隱藏層與輸出層之間的系數(shù)矩陣元素?cái)?shù)目)+10(偏置項(xiàng)元素?cái)?shù)目)=1290個(gè)參數(shù)。僅僅一個(gè)兩層全連接神經(jīng)網(wǎng)絡(luò)就有超過(guò)十萬(wàn)個(gè)參數(shù)需要訓(xùn)練,因此在拉直層之前加入卷積層搭建卷積神經(jīng)網(wǎng)絡(luò)減少待訓(xùn)練參數(shù)數(shù)目是必要的。


三,復(fù)現(xiàn)模型結(jié)構(gòu),讀取訓(xùn)練后得到的最優(yōu)模型,然后進(jìn)行實(shí)際測(cè)試

from PIL import Image import numpy as np import tensorflow as tfmodel_save_path = './mnist.ckpt' # 指定模型的路徑# 復(fù)現(xiàn)模型結(jié)構(gòu) model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(10, activation='softmax')])# 讀入已經(jīng)經(jīng)過(guò)訓(xùn)練的權(quán)重系數(shù) model.load_weights(model_save_path)while True:image_path = input("輸入圖片名")img = Image.open(image_path)# 縮放輸入圖片,使其大小固定img = img.resize((28, 28), Image.ANTIALIAS) # Image.ANTIALIAS抗鋸齒,抗圖像折疊失真img_arr = np.array(img.convert('L')) # 轉(zhuǎn)為8位寬的np.array數(shù)據(jù)類型# 遍歷每一個(gè)像素,進(jìn)行閾值二值化處理,把輸入圖片轉(zhuǎn)換為黑底白字圖片,因?yàn)橛?xùn)練時(shí)的圖片 全是黑的白字的for i in range(28):for j in range(28):if img_arr[i][j] < 200:img_arr[i][j] = 255else:img_arr[i][j] = 0img_arr = img_arr / 255.0 # 不歸一化可能無(wú)法收斂x_predict = img_arr[tf.newaxis, ...] # 添加一個(gè)維度,變?yōu)閟hape:(1,28,28),為輸入predict函數(shù)做準(zhǔn)備;# predict函數(shù)默認(rèn)參數(shù)batch=32,要求輸入數(shù)據(jù)是三維的。result = model.predict(x_predict) # model.predict執(zhí)行神經(jīng)網(wǎng)絡(luò)前向傳播過(guò)程,得到神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)結(jié)果print(result) # 打印十分類概率值pred = tf.argmax(result, axis=1) # 取概率最大的分類的標(biāo)簽值,標(biāo)簽值與0~9數(shù)字一一對(duì)應(yīng)print('\n')tf.print("識(shí)別結(jié)果為:", pred)

四,實(shí)際測(cè)試
手寫了幾張數(shù)字圖片(就比如下面那幾張),大小可以任意,因?yàn)檩斎腧?yàn)證的時(shí)候會(huì)調(diào)整大小。圖片名例如為2.png,3.png等




注:數(shù)據(jù)增強(qiáng)(隨機(jī)旋轉(zhuǎn),隨機(jī)偏移等增大數(shù)據(jù)量)之后的識(shí)別結(jié)果會(huì)更好一點(diǎn)。
如果不想使用keras而只用原生的tensorflow的話可以參考我的一篇博客:
最簡(jiǎn)單的單層神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類

參考:北京大學(xué)《人工智能實(shí)踐-Tensorflow筆記》課程

總結(jié)

以上是生活随笔為你收集整理的两层全连接神经网络实现手写数字识别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩生活片 | 黄网在线观看视频 | 精品孕妇一区二区三区 | 中文字幕二| 天堂素人约啪 | 精品91久久久 | 日韩中文字幕在线免费观看 | 四虎在线免费观看 | 亚洲热在线视频 | 亚洲精品国产电影 | 西西人体44www大胆无码 | 久久人妻少妇嫩草av | 欲色影音 | 蜜臀在线一区二区三区 | 欧美日韩视频在线观看免费 | 熟妇五十路六十路息与子 | av日韩在线免费观看 | 午夜精品福利一区二区 | 操操操综合| 国产视频福利在线 | 狠狠操女人 | 97超碰国产精品无码蜜芽 | 入禽太深免费视频 | av福利网站 | 日本三级中文字幕在线观看 | 一级久久久久久久 | 亚洲一区观看 | 多毛的亚洲人毛茸茸 | 肉色超薄丝袜脚交一区二区图片 | 欧美亚洲精品一区 | 四虎国产成人永久精品免费 | 国内一级黄色片 | 亚洲精品鲁一鲁一区二区三区 | 中文字幕1 | 国产又大又黄的视频 | 午夜一区二区三区在线观看 | 日韩av电影网 | 日韩影院在线 | 美女黄色录像 | 婷婷第四色| 中文字幕25页 | 中文字幕在线播放第一页 | 久久久久a | 日韩成人高清在线 | 中文字幕有码无码人妻av蜜桃 | 内射中出日韩无国产剧情 | 欧美亚色| 香蕉久久夜色精品国产使用方法 | 日本高清免费aaaaa大片视频 | 亚洲精品久久久乳夜夜欧美 | 在线看黄免费 | 深田咏美中文字幕 | 伊人成人动漫 | av资源一区 | 小早川怜子久久精品中文字幕 | wwwww国产| 2019日韩中文字幕mv | 精品久久久久久久久久久久久 | 山村大伦淫第1部分阅读小说 | 麻豆精品国产传媒 | 特一级黄色片 | 欧av在线| 污污网站在线播放 | 精品免费国产一区二区三区四区 | 中文字幕精品一二三四五六七八 | 天堂а√在线中文在线 | 亚洲国产aaa | 亚洲精品久久久久久动漫器材一区 | 日韩中文一区 | 日韩三级黄 | 91中文视频 | 日韩av在线影院 | 欧美日韩免费一区二区 | 97精品熟女少妇一区二区三区 | 欧美一区二区 | 亚洲砖区区免费 | 国产高清精品在线观看 | 伊人网伊人影院 | 日批小视频 | 色哟哟网站入口 | 玉足调教丨vk24分钟 | 亚洲精品乱码久久久久久蜜桃欧美 | 日本久久网 | 日韩精品中文字幕在线观看 | 亚洲色图导航 | 色视频在线观看 | 图片一区二区 | 国产精品久久久999 www日本高清视频 | 极品少妇xxxx精品少妇偷拍 | 日本女人hd | 爱爱视频在线免费观看 | www天堂网| 成人免费毛片东京热 | av最新| 天天干天天色天天 | 男人猛进女人爽的大叫 | 久久视频这里只有精品 | 亚洲色图视频网站 | 欧美涩涩视频 |