搜尋
首頁後端開發Python教學帶你簡單了解python創建神經網路模型的內容
帶你簡單了解python創建神經網路模型的內容Oct 08, 2018 pm 05:18 PM
pythonrandom函數神經網路

這篇文章帶給大家的內容是關於帶你簡單了解python創建神經網路模型的內容,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

摘要: 對神經網路的工作原理感到好奇?動手實踐一下吧,了解神經網路是如何運作的最佳方法是自己創建一個簡單神經網路。

神經網路(NN),又稱為人工神經網路(ANN),是機器學習領域中學習演算法的子集,大體上借鑒了生物神經網路的概念。目前,神經網路在電腦視覺、自然語言處理等領域應用廣泛。德國資深機器學習專家Andrey Bulezyuk說到,「神經網路正在徹底改變機器學習,因為它們能夠有效地模擬各種學科和行業的複雜抽象,且無需太多人工參與。」
大體上,人工神經網路基本上包含以下元件:

  • 接收資料並傳遞資料的輸入層(input layer);

  • 隱藏層(hidden layer);

  • 輸出層(output layer);

  • 層與層之間的權重(weight);

  • 每個隱藏層使用的激活函數(activation function);

#在本文教程中,使用的是簡單的Sigmoid激活函數,但注意一點,在深層神經網路模型中, sigmoid活化函數一般不作為首選,原因是其易發生梯度擴散現象。

此外,人工神經網路有幾種不同類型的神經網絡,例如前饋神經網路、卷積神經網路及遞歸神經網路等。本文將以簡單的前饋或感知神經網路為例,這種類型的人工神經網路是直接從前到後傳遞資料的,簡稱前向傳播過程。

而訓練前饋神經元通常需要反向傳播演算法,這就需要為網路提供對應的輸入和輸出集。當輸入資料傳輸到神經元時,它會經過相應的處理,並將產生的輸出傳輸給下一層。
下圖簡單展示了一個神經網路結構:

帶你簡單了解python創建神經網路模型的內容

#此外,理解神經網路如何運作的最佳方法是學習如何在不使用任何工具箱的前提下從頭開始建立一個。在本文中,我們將示範如何使用Python創建一個簡單的神經網路。

問題

下表顯示了我們將解決的問題:

我們將訓練神經網絡,以便在提供一組新資料時可以預測正確的輸出值。

從表中看到,輸出的值總是等於輸入節中的第一個值。因此,我們可以期望新情形的輸出(?)值為1。

下面讓我們看看是否可以使用一些Python程式碼來得到相同的結果。

建立神經網路類別|NeuralNetwork Class

我們將在Python中建立一個NeuralNetwork類別來訓練神經元以提供準確的預測,該類別還包含其他輔助函數。我們不會將神經網路庫用於創建這個簡單的神經網路範例中,但會導入基本的Numpy庫來協助計算。

Numpy函式庫是處理資料的一種基本函式庫,它有以下四種重要的計算方法:

  • EXP-用於產生所述自然指數;

  • array-用於產生矩陣;

  • #dot-用於矩陣相乘;

帶你簡單了解python創建神經網路模型的內容

#random——用於產生隨機數;


    應用Sigmoid函數
  • 我們將使用Sigmoid函數,它繪製出一個「S」形曲線,將其作為本文創建的神經網路的激活函數。

    ##################此函數可以將任何值對應到0到1之間,並能幫助我們標準化輸入的加權和。 ######此後,我們將建立Sigmoid函數的導數,以幫助計算權重的基本調整。 ######可以使用Sigmoid函數的輸出來產生其導數。例如,如果輸出變數是“x”,那麼它的導數將是x *(1-x)。 ######訓練模型######訓練模型意味著我們將教導神經網路進行準確預測的階段。每個輸入都有一個權重(weights)-正或負的,這意味著具有大值正權重或大值負權重的輸入將多所得到的輸出有更大地影響。 ######注意,模型訓練最初時,每個權重的初始化都是隨機數。 ###以下是本文建構的神經網路範例問題中訓練過程:############1.從訓練資料集中獲取輸入,根據它們的權重進行一些調整,並透過計算神經網絡輸出的方法來一層一層的傳輸;###
  • 2.計算反向傳播的錯誤率。在這種情況下,它是神經元預測得到的輸出與訓練資料集的預期輸出之間的誤差;

  • 3.根據所得的誤差範圍,使用誤差加權導數公式進行一些小的權重調整;

  • 4.將此過程重複15,000次,在每次迭代過程中,同時處理整個訓練集;

在這裡,我們使用「.T」函數對矩陣求偏壓。因此,數字將以這種方式儲存:

帶你簡單了解python創建神經網路模型的內容

最終,神經元的權重將針對所提供的訓練資料進行最佳化。因此,如果神經網路的輸出與期望的輸出一致時,表示訓練完成,可以進行準確的預測,這就是反向傳播的方式。

封裝

最後,初始化NeuralNetwork類別後並執行整個程序,以下是如何在Python專案中建立神經網路的完整程式碼:

import numpy as np

class NeuralNetwork():
    
    def __init__(self):
        # 设置随机数种子
        np.random.seed(1)
        
        # 将权重转化为一个3x1的矩阵,其值分布为-1~1,并且均值为0
        self.synaptic_weights = 2 * np.random.random((3, 1)) - 1

    def sigmoid(self, x):
        # 应用sigmoid激活函数
        return 1 / (1 + np.exp(-x))

    def sigmoid_derivative(self, x):
        #计算Sigmoid函数的偏导数
        return x * (1 - x)

    def train(self, training_inputs, training_outputs, training_iterations):
        
        # 训练模型
        for iteration in range(training_iterations):
            # 得到输出
            output = self.think(training_inputs)

            # 计算误差
            error = training_outputs - output
            
            # 微调权重
            adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output))

            self.synaptic_weights += adjustments

    def think(self, inputs):
        # 输入通过网络得到输出   
        # 转化为浮点型数据类型
        
        inputs = inputs.astype(float)
        output = self.sigmoid(np.dot(inputs, self.synaptic_weights))
        return output


if __name__ == "__main__":

    # 初始化神经类
    neural_network = NeuralNetwork()

    print("Beginning Randomly Generated Weights: ")
    print(neural_network.synaptic_weights)

    #训练数据
    training_inputs = np.array([[0,0,1],
                                [1,1,1],
                                [1,0,1],
                                [0,1,1]])

    training_outputs = np.array([[0,1,1,0]]).T

    # 开始训练
    neural_network.train(training_inputs, training_outputs, 15000)

    print("Ending Weights After Training: ")
    print(neural_network.synaptic_weights)

    user_input_one = str(input("User Input One: "))
    user_input_two = str(input("User Input Two: "))
    user_input_three = str(input("User Input Three: "))
    
    print("Considering New Situation: ", user_input_one, user_input_two, user_input_three)
    print("New Output data: ")
    print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))
    print("Wow, we did it!")

以下是執行程式碼後產生的輸出:

帶你簡單了解python創建神經網路模型的內容

以上是我們設法創建的一個簡單的神經網路。首先神經網路開始為自己分配一些隨機權,此後,它使用訓練範例訓練自身。

因此,如果出現新的樣本輸入[1,0,0],則其輸出值為0.9999584。而期望的正確答案是1,可以說二者是非常接近了,考慮到Sigmoid函數是非線性函數,這點誤差是可以接受的。

此外,本文只使用了一層神經網路來執行簡單的任務。如果我們將數千個這些人工神經網路集合在一起會發生什麼情況呢?我們可以100%模仿人類思維嗎?答案是肯定的,但是目前實現起來是比較困難的,只能說是十分相近。對此有興趣的讀者可以閱讀與深度學習相關的資料。

以上是帶你簡單了解python創建神經網路模型的內容的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault思否。如有侵權,請聯絡admin@php.cn刪除
GNN的基础、前沿和应用GNN的基础、前沿和应用Apr 11, 2023 pm 11:40 PM

近年来,图神经网络(GNN)取得了快速、令人难以置信的进展。图神经网络又称为图深度学习、图表征学习(图表示学习)或几何深度学习,是机器学习特别是深度学习领域增长最快的研究课题。本次分享的题目为《GNN的基础、前沿和应用》,主要介绍由吴凌飞、崔鹏、裴健、赵亮几位学者牵头编撰的综合性书籍《图神经网络基础、前沿与应用》中的大致内容。一、图神经网络的介绍1、为什么要研究图?图是一种描述和建模复杂系统的通用语言。图本身并不复杂,它主要由边和结点构成。我们可以用结点表示任何我们想要建模的物体,可以用边表示两

一文通览自动驾驶三大主流芯片架构一文通览自动驾驶三大主流芯片架构Apr 12, 2023 pm 12:07 PM

当前主流的AI芯片主要分为三类,GPU、FPGA、ASIC。GPU、FPGA均是前期较为成熟的芯片架构,属于通用型芯片。ASIC属于为AI特定场景定制的芯片。行业内已经确认CPU不适用于AI计算,但是在AI应用领域也是必不可少。 GPU方案GPU与CPU的架构对比CPU遵循的是冯·诺依曼架构,其核心是存储程序/数据、串行顺序执行。因此CPU的架构中需要大量的空间去放置存储单元(Cache)和控制单元(Control),相比之下计算单元(ALU)只占据了很小的一部分,所以CPU在进行大规模并行计算

扛住强风的无人机?加州理工用12分钟飞行数据教会无人机御风飞行扛住强风的无人机?加州理工用12分钟飞行数据教会无人机御风飞行Apr 09, 2023 pm 11:51 PM

当风大到可以把伞吹坏的程度,无人机却稳稳当当,就像这样:御风飞行是空中飞行的一部分,从大的层面来讲,当飞行员驾驶飞机着陆时,风速可能会给他们带来挑战;从小的层面来讲,阵风也会影响无人机的飞行。目前来看,无人机要么在受控条件下飞行,无风;要么由人类使用遥控器操作。无人机被研究者控制在开阔的天空中编队飞行,但这些飞行通常是在理想的条件和环境下进行的。然而,要想让无人机自主执行必要但日常的任务,例如运送包裹,无人机必须能够实时适应风况。为了让无人机在风中飞行时具有更好的机动性,来自加州理工学院的一组工

对比学习算法在转转的实践对比学习算法在转转的实践Apr 11, 2023 pm 09:25 PM

1 什么是对比学习1.1 对比学习的定义1.2 对比学习的原理1.3 经典对比学习算法系列2 对比学习的应用3 对比学习在转转的实践3.1 CL在推荐召回的实践3.2 CL在转转的未来规划1 什么是对比学习1.1 对比学习的定义对比学习(Contrastive Learning, CL)是近年来 AI 领域的热门研究方向,吸引了众多研究学者的关注,其所属的自监督学习方式,更是在 ICLR 2020 被 Bengio 和 LeCun 等大佬点名称为 AI 的未来,后陆续登陆 NIPS, ACL,

python random库如何使用demopython random库如何使用demoMay 05, 2023 pm 08:13 PM

pythonrandom库简单使用demo当我们需要生成随机数或者从一个序列中随机选择元素时,可以使用Python内置的random库。下面是一个带有注释的例子,演示了如何使用random库:#导入random库importrandom#生成一个0到1之间的随机小数random_float=random.random()print(random_float)#生成一个指定范围内的随机整数(包括端点)random_int=random.randint(1,10)print(random_int)#

Michael Bronstein从代数拓扑学取经,提出了一种新的图神经网络计算结构!Michael Bronstein从代数拓扑学取经,提出了一种新的图神经网络计算结构!Apr 09, 2023 pm 10:11 PM

本文由Cristian Bodnar 和Fabrizio Frasca 合著,以 C. Bodnar 、F. Frasca 等人发表于2021 ICML《Weisfeiler and Lehman Go Topological: 信息传递简单网络》和2021 NeurIPS 《Weisfeiler and Lehman Go Cellular: CW 网络》论文为参考。本文仅是通过微分几何学和代数拓扑学的视角讨论图神经网络系列的部分内容。从计算机网络到大型强子对撞机中的粒子相互作用,图可以用来模

Java使用Random类的nextDouble()函数生成随机的双精度浮点数Java使用Random类的nextDouble()函数生成随机的双精度浮点数Jul 25, 2023 am 09:06 AM

Java使用Random类的nextDouble()函数生成随机的双精度浮点数Java中的Random类是一个伪随机数生成器,可以用来生成不同类型的随机数。其中,nextDouble()函数用于生成一个随机的双精度浮点数。在使用Random类之前,我们需要先导入java.util包。接下来我们可以创建一个Random对象,然后使用nextDouble()函数

微软提出自动化神经网络训练剪枝框架OTO,一站式获得高性能轻量化模型微软提出自动化神经网络训练剪枝框架OTO,一站式获得高性能轻量化模型Apr 04, 2023 pm 12:50 PM

OTO 是业内首个自动化、一站式、用户友好且通用的神经网络训练与结构压缩框架。 在人工智能时代,如何部署和维护神经网络是产品化的关键问题考虑到节省运算成本,同时尽可能小地损失模型性能,压缩神经网络成为了 DNN 产品化的关键之一。DNN 压缩通常来说有三种方式,剪枝,知识蒸馏和量化。剪枝旨在识别并去除冗余结构,给 DNN 瘦身的同时尽可能地保持模型性能,是最为通用且有效的压缩方法。三种方法通常来讲可以相辅相成,共同作用来达到最佳的压缩效果。然而现存的剪枝方法大都只针对特定模型,特定任务,且需要很

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),