婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python神經網絡編程之手寫數字識別

python神經網絡編程之手寫數字識別

熱門標簽:廣告地圖標注app 公司電話機器人 白銀外呼系統 海南400電話如何申請 唐山智能外呼系統一般多少錢 激戰2地圖標注 騰訊外呼線路 哈爾濱ai外呼系統定制 陜西金融外呼系統

寫在之前

首先是寫在之前的一些建議:

首先是關于這本書,我真的認為他是將神經網絡里非常棒的一本書,但你也需要注意,如果你真的想自己動手去實現,那么你一定需要有一定的python基礎,并且還需要有一些python數據科學處理能力

然后希望大家在看這邊博客的時候對于神經網絡已經有一些了解了,知道什么是輸入層,什么是輸出層,并且明白他們的一些理論,在這篇博客中我們僅僅是展開一下代碼;

然后介紹一下本篇博客的環境等:

語言:Python3.8.5

環境:jupyter

庫文件: numpy | matplotlib | scipy

一、代碼框架

我們即將設計一個神經網絡對象,它可以幫我們去做數據的訓練,以及數據的預測,所以我們將具有以下的三個方法:

首先我們需要初始化這個函數,我們希望這個神經網絡僅有三層,因為再多也不過是在隱藏層去做文章,所以先做一個簡單的。那么我們需要知道我們輸入層、隱藏層和輸出層的節點個數;訓練函數,我們需要去做訓練,得到我們需要的權重。通過我們已有的權重,將給定的輸入去做輸出。

二、準備工作

現在我們需要準備一下:

1.將我們需要的庫導入

import numpy as np
import scipy.special as spe
import matplotlib.pyplot as plt

2.構建一個類

class neuralnetwork:
    # 我們需要去初始化一個神經網絡
    
    def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
        pass
        
        
    def train(self, inputs_list, targets_list):
        pass
        
    
    def query(self, inputs_list):
        pass

3.我們的主函數

input_nodes = 784    # 輸入層的節點數
hidden_nodes = 88    # 隱藏層的節點數
output_nodes = 10    # 輸出層的節點數

learn_rate = 0.05    # 學習率

n = neuralnetwork(input_nodes, hidden_nodes, output_nodes, learn_rate)

4.導入文件

data_file = open("E:\sklearn_data\神經網絡數字識別\mnist_train.csv", 'r')
data_list = data_file.readlines()
data_file.close()
file2 = open("E:\sklearn_data\神經網絡數字識別\mnist_test.csv")
answer_data = file2.readlines()
file2.close()

這里需要介紹以下這個數據集,訓練集在這里,測試集在這里

三、框架的開始

def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
        
        self.inodes = inputnodes   # 輸入層節點設定
        self.hnodes = hiddennodes  # 影藏層節點設定
        self.onodes = outputnodes  # 輸出層節點設定
        
        self.lr = learningrate     # 學習率設定,這里可以改進的
        
        self.wih = (np.random.normal(0.0, pow(self.hnodes, -0.5),(self.hnodes, self.inodes))) # 這里是輸入層與隱藏層之間的連接
        self.who = (np.random.normal(0.0, pow(self.onodes, -0.5),(self.onodes, self.hnodes))) # 這里是隱藏層與輸出層之間的連接
        self.activation_function = lambda x: spe.expit(x)           # 返回sigmoid函數

Δw j,k ​ =α∗E k ​ ∗ sigmoid (O k ​ )∗(1−sigmoid(O k ​ ))⋅O j ⊤

def query(self, inputs_list):
        inputs = np.array(inputs_list, ndmin=2).T # 輸入進來的二維圖像數據
        
        hidden_inputs = np.dot(self.wih, inputs)  # 隱藏層計算,說白了就是線性代數中的矩陣的點積
        hidden_outputs = self.activation_function(hidden_inputs) # 將隱藏層的輸出是經過sigmoid函數處理
        final_inputs = np.dot(self.who, hidden_outputs) # 原理同hidden_inputs
        final_outputs = self.activation_function(final_inputs) # 原理同hidden_outputs 
        
        return final_outputs # 最終的輸出結果就是我們預測的數據

這里我們對預測這一部分做一個簡單的解釋:我們之前的定義輸出的節點是10個,對應的是十個數字。
而為什么會通過神經網絡能達到這個亞子,我推薦這本書深度學習的數學 這本書的理論講解非常不錯?。。?/p>

四、訓練模型構建

之前的部分相對而言還是比較簡單的,那么接下來就是如何去構建訓練模型了。

 def train(self, inputs_list, targets_list):
        # 前期和識別過程是一樣的,說白了我們與要先看看現在的預測結果如何,只有根據這次的預期結果才能去修改之前的權重
        inputs = np.array(inputs_list, ndmin=2).T
        
        hidden_inputs = np.dot(self.wih, inputs)
        hidden_outputs = self.activation_function(hidden_inputs)
        final_inputs = np.dot(self.who, hidden_outputs)
        final_outputs = self.activation_function(final_inputs)
        
        # 接下來將標簽拿遲來
        targets = np.array(targets_list, ndmin=2).T

		# 得到我們的數據預測的誤差,這個誤差將是向前反饋的基礎
        output_errors = targets - final_outputs
        # 這部分是根據公式得到的反向傳播參數
        hidden_errors = np.dot(self.who.T, output_errors)
        
        # 根據我們的反饋參數去修改兩個權重
        self.who += self.lr * np.dot((output_errors * final_outputs * ( 1.0-final_outputs)), np.transpose(hidden_outputs))
        self.wih += self.lr * np.dot((hidden_errors * hidden_outputs * (1.0-hidden_outputs)), np.transpose(inputs))

如此我們的基礎神經網絡構建完成了。

五、手寫數字的識別

接下來神經網絡是完成的,那么我們究竟該如何去將數據輸入呢?
csv文件我們并不陌生【或許陌生?】,他是逗號分割文件,顧名思義,它是通過逗號分隔的,所以我們可以打開看一下:

眼花繚亂??!

但是細心的我們可以發現他的第一個數字都是0~9,說明是我們的標簽,那么后面的應該就是圖像了,通過了解我們知道這個后面的數據是一個28*28的圖像。

all_value = data_list[0].split(',') # split分割成列表
image_array = np.asfarray(all_value[1:]).reshape((28,28)) # 將數據reshape成28*28的矩陣
plt.imshow(image_array, cmap='Greys', interpolation='None') # 展示一下

通過這段代碼,我們可以簡單的看一下每個數字是什么:

很好,知道這里就足夠了,那么我們接下來就是將這些數據傳入了!

我們在訓練的時候,需要將他們都轉化成數字列表,方便處理

data = []     # 用來保存訓練過程的數據
sum_count = 0 # 統計總識別的正確的個數
for i in range(15): # 訓練的輪數
    count = 0         # 單次訓練識別正確的個數
    for j in range(len(data_list)):   # 對60000張圖片開始訓練, 沒有劃分數據集的過程主要是別人直接給了,我也懶得自己去做了,主要就是展示一下神經網絡嘛~
        target = np.zeros(10)+0.01 # 生成初始標簽集合,用來和結果對比
        line_ = data_list[j].split(',')    # 對每一行的數據處理切割
        imagearray = np.asfarray(line_)  # 將切割完成的數據轉換成數字列表
        target[int(imagearray[0])] = 1.0    # 將正確答案挑出來
        n.train(imagearray[1:]/255*0.99+0.01, target) # 丟入訓練,丟入的時候注意將數據轉換成0.01~1.0之間的結果
    for line in answer_data: # 對10000組測試集測試
        all_values = line.split(',')
        answer = n.query((np.asfarray(all_values[1:])/255*0.99)+0.01)
        if answer[int(all_values[0])] > 0.85:  # 查看對應位置是否達到自定義的閾值?
            count += 1
    sum_count += count
    string = "訓練進度 %05f\n本輪準確度 %05f\n總準確度 %05f\n\n"%(i/120,count/len(answer_data), sum_count/(len(answer_data)*(i+1)))
    data.append([i/120,count/len(answer_data), sum_count/(len(answer_data)*(i+1))])  # 將數據保存方便生成訓練曲線
    print(string)
    ```
接下來我們將結果圖片展示以下吧~

```python
data = np.array(data)
plt.plot(range(len(data)), data[:, 1:])

六、源碼

把源碼整理一下貼出來

import numpy as np
import scipy.special as spe
import matplotlib.pyplot as plt

class neuralnetwork:
    # 我們需要去初始化一個神經網絡
    
    def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
        
        self.inodes = inputnodes
        self.hnodes = hiddennodes
        self.onodes = outputnodes
        
        self.lr = learningrate
        
        self.wih = (np.random.normal(0.0, pow(self.hnodes, -0.5),(self.hnodes, self.inodes)))
        self.who = (np.random.normal(0.0, pow(self.onodes, -0.5),(self.onodes, self.hnodes)))
        self.activation_function = lambda x: spe.expit(x)           # 返回sigmoid函數
        
        
    def train(self, inputs_list, targets_list):
        inputs = np.array(inputs_list, ndmin=2).T
        
        hidden_inputs = np.dot(self.wih, inputs)
        hidden_outputs = self.activation_function(hidden_inputs)
        final_inputs = np.dot(self.who, hidden_outputs)
        final_outputs = self.activation_function(final_inputs)
        
        targets = np.array(targets_list, ndmin=2).T
        output_errors = targets - final_outputs
        hidden_errors = np.dot(self.who.T, output_errors)
        
        self.who += self.lr * np.dot((output_errors * final_outputs * ( 1.0-final_outputs)), np.transpose(hidden_outputs))
        self.wih += self.lr * np.dot((hidden_errors * hidden_outputs * (1.0-hidden_outputs)), np.transpose(inputs))
        
    
    def query(self, inputs_list):
        inputs = np.array(inputs_list, ndmin=2).T
        
        hidden_inputs = np.dot(self.wih, inputs)
        hidden_outputs = self.activation_function(hidden_inputs)
        final_inputs = np.dot(self.who, hidden_outputs)
        final_outputs = self.activation_function(final_inputs)
        
        return final_outputs
    
        
input_nodes = 784
hidden_nodes = 88
output_nodes = 10

learn_rate = 0.05

n = neuralnetwork(input_nodes, hidden_nodes, output_nodes, learn_rate)

data_file = open("E:\sklearn_data\神經網絡數字識別\mnist_train.csv", 'r')
data_list = data_file.readlines()
data_file.close()
file2 = open("E:\sklearn_data\神經網絡數字識別\mnist_test.csv")
answer_data = file2.readlines()
file2.close()

data = []

sum_count = 0
for i in range(15):
    count = 0
    for j in range(len(data_list)):
        target = np.zeros(10)+0.01
        line_ = data_list[j].split(',')
        imagearray = np.asfarray(line_)
        target[int(imagearray[0])] = 1.0
        n.train(imagearray[1:]/255*0.99+0.01, target)
    for line in answer_data:
        all_values = line.split(',')
        answer = n.query((np.asfarray(all_values[1:])/255*0.99)+0.01)
        if answer[int(all_values[0])] > 0.85:
            count += 1
    sum_count += count
    string = "訓練進度 %05f\n本輪準確度 %05f\n總準確度 %05f\n\n"%(i/120,count/len(answer_data), sum_count/(len(answer_data)*(i+1)))
    data.append([i/120,count/len(answer_data), sum_count/(len(answer_data)*(i+1))])
    print(string)


data = np.array(data)

plt.plot(range(len(data)), data[:, 1:])

可以說是相對簡單的一個程序,但卻是包含著神經網絡最基礎的思想!值得好好康康~

七、思考

如何識別其他手寫字體等?

我的想法:通過圖像處理,將像素規定到相近大小【尺度放縮】

圖像大小運行速度問題

我的想法:如何快速的矩陣運算,通過C語言是否可以加速?相較于darknet這個神經網絡僅有三層,運算速度并不是十分理想。當然cuda編程對于GPU加速肯定是最好的選擇之一。

到此這篇關于python神經網絡編程之手寫數字識別的文章就介紹到這了,更多相關python手寫數字識別內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • numpy創建神經網絡框架
  • 教你使用Python建立任意層數的深度神經網絡
  • python機器學習之神經網絡
  • pytorch動態神經網絡(擬合)實現
  • Python如何使用神經網絡進行簡單文本分類
  • pytorch之深度神經網絡概念全面整理

標簽:四川 黑龍江 黔西 惠州 益陽 上海 常德 鷹潭

巨人網絡通訊聲明:本文標題《python神經網絡編程之手寫數字識別》,本文關鍵詞  python,神經,網絡編程,之,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python神經網絡編程之手寫數字識別》相關的同類信息!
  • 本頁收集關于python神經網絡編程之手寫數字識別的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    视频一区视频二区中文字幕| 国产日韩欧美a| 99国产麻豆精品| av不卡在线观看| 成人高清视频免费观看| 成人精品在线视频观看| 国产风韵犹存在线视精品| 国产精品一区免费在线观看| 国产成人精品免费一区二区| 成人h精品动漫一区二区三区| 风间由美一区二区三区在线观看| 成人自拍视频在线观看| 91黄色激情网站| 欧美日韩激情一区二区| 日韩一区二区电影在线| 精品国产91亚洲一区二区三区婷婷| 精品入口麻豆88视频| 久久久精品一品道一区| 中文字幕中文字幕一区| 亚洲自拍偷拍欧美| 久久99国产精品久久| 成人av电影免费在线播放| 色88888久久久久久影院野外| 欧美日韩国产综合久久| 精品欧美久久久| 亚洲欧美日韩一区| 日本午夜精品视频在线观看 | 在线观看一区二区视频| 欧美日韩高清影院| 久久久精品tv| 亚洲国产精品精华液网站| 精品中文av资源站在线观看| 99久久精品费精品国产一区二区| 精品视频色一区| 国产亚洲欧美激情| 五月激情六月综合| 成人中文字幕合集| 制服丝袜激情欧洲亚洲| 国产精品传媒视频| 免费不卡在线视频| 96av麻豆蜜桃一区二区| 日韩一级欧美一级| 亚洲美女精品一区| 国产福利一区二区三区视频在线 | 欧美一区二区女人| 中文字幕一区二区三区在线不卡| 性久久久久久久| caoporm超碰国产精品| 日韩女优av电影| 亚洲午夜精品一区二区三区他趣| 久久av资源站| 精品视频在线视频| 亚洲人快播电影网| 成人福利视频在线| 日韩欧美一级片| 图片区小说区区亚洲影院| 99久久精品国产麻豆演员表| 久久在线观看免费| 无吗不卡中文字幕| 91国偷自产一区二区三区观看| 久久久www成人免费无遮挡大片| 日韩精品久久久久久| 欧美日韩视频在线第一区 | 麻豆成人av在线| 欧美精品自拍偷拍| 亚洲成人免费观看| 精品视频在线视频| 亚洲丰满少妇videoshd| 一本大道久久a久久精二百| 国产精品成人一区二区三区夜夜夜 | 水蜜桃久久夜色精品一区的特点| 91视频免费观看| 国产精品久久久久久久久久免费看| 免费人成黄页网站在线一区二区| 欧美日韩国产在线观看| 丝袜美腿亚洲一区二区图片| 3atv在线一区二区三区| 日本人妖一区二区| 日韩免费视频一区二区| 蜜桃视频一区二区三区在线观看| 欧美电影免费观看高清完整版在 | 精品综合久久久久久8888| 欧美va亚洲va| 国产成人精品免费视频网站| 国产精品网站在线| 色狠狠桃花综合| 亚洲6080在线| 精品国产乱码久久久久久牛牛| 麻豆精品一区二区av白丝在线| xnxx国产精品| av在线播放一区二区三区| 亚洲黄一区二区三区| 欧美丰满少妇xxxxx高潮对白| 激情久久五月天| 亚洲色图欧美激情| 欧美人狂配大交3d怪物一区 | 91麻豆国产精品久久| 亚洲人成7777| 5858s免费视频成人| 精品亚洲porn| 亚洲另类一区二区| 欧美一区二区福利视频| 国产aⅴ综合色| 亚洲综合清纯丝袜自拍| 日韩精品一区二| 大胆亚洲人体视频| 日韩精品1区2区3区| 久久精品网站免费观看| 欧美在线观看一二区| 国产综合色视频| 亚洲精品日日夜夜| 日韩美女在线视频| 91在线播放网址| 国产乱对白刺激视频不卡| 亚洲午夜激情av| 2020国产精品| 91精品国产福利| 一本色道久久综合狠狠躁的推荐| 老司机精品视频线观看86| 亚洲免费观看高清| 国产欧美一区二区三区鸳鸯浴 | 国产精品久久久久影院亚瑟| 欧美日韩中文字幕一区| 成人动漫一区二区三区| 看电影不卡的网站| 日韩影视精彩在线| 亚洲丝袜制服诱惑| 国产欧美日韩卡一| 久久一区二区视频| 日韩一区二区三区av| 欧美亚洲另类激情小说| av在线播放成人| 成人不卡免费av| 成人黄色国产精品网站大全在线免费观看| 日韩av一区二区在线影视| 亚洲午夜激情网站| 亚洲国产va精品久久久不卡综合| 自拍偷拍亚洲欧美日韩| 国产精品久久一级| 国产天堂亚洲国产碰碰| 久久亚洲精华国产精华液| 日韩精品中文字幕在线不卡尤物| 欧美三级乱人伦电影| 欧美日韩中文一区| 在线不卡欧美精品一区二区三区| 欧美综合在线视频| 91福利在线观看| 欧美揉bbbbb揉bbbbb| 欧美体内she精视频| 91国偷自产一区二区使用方法| 一本久久a久久免费精品不卡| 色诱视频网站一区| 欧美系列一区二区| 欧美日韩精品一区二区天天拍小说| 欧美天堂一区二区三区| 3d成人动漫网站| 精品美女在线观看| 久久久久亚洲蜜桃| 中文字幕中文字幕在线一区| 亚洲男同性视频| 午夜不卡av在线| 国产综合久久久久久鬼色| 国产成人精品一区二区三区四区| 成人99免费视频| 欧美天天综合网| 久久综合狠狠综合久久综合88| 久久婷婷综合激情| 亚洲视频一区二区在线| 亚洲午夜久久久久中文字幕久| 麻豆精品新av中文字幕| 大白屁股一区二区视频| 日本乱人伦一区| 日韩精品中文字幕在线不卡尤物| 国产午夜久久久久| 亚洲国产中文字幕| 国产精品一区免费在线观看| 91麻豆产精品久久久久久| 欧美日韩免费观看一区二区三区| 884aa四虎影成人精品一区| 精品国产乱码久久久久久浪潮| 国产精品久久久久久久久动漫 | 欧美午夜一区二区三区免费大片| 8v天堂国产在线一区二区| 久久久久国产精品人| 洋洋成人永久网站入口| 免费久久精品视频| 99re66热这里只有精品3直播 | 午夜不卡av在线| 成人免费毛片app| 制服丝袜亚洲网站| 中文字幕一区二区日韩精品绯色| 亚洲国产精品麻豆| 99精品欧美一区二区蜜桃免费| 欧美一区二区三区在线看| 18涩涩午夜精品.www| 国产麻豆精品久久一二三| 8x福利精品第一导航| 亚洲免费观看高清完整| 成人三级伦理片| 久久综合九色综合久久久精品综合 |