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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

神经网络基本原理简明教程-0-Python-Numpy库的点滴

發布時間:2024/7/23 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 神经网络基本原理简明教程-0-Python-Numpy库的点滴 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python中的Numpy的基本知識

Copyright ? Microsoft Corporation. All rights reserved.
適用于License版權許可
更多微軟人工智能學習資源,請見微軟人工智能教育與學習共建社區

以下列出一些關于Numpy矩陣運算的基本知識和坑點。

首先需要在命令行中安裝Numpy庫和繪圖庫(可選):

pip install numpy pip install matplotlib

然后在python文件的第一行,加入對它們的引用:

import numpy as np import matplotlib.pyplot as plt
  • 基本矩陣運算
a=np.array([1,2,3,4,5,6]).reshape(2,3) b=np.array([1,1,1,1,1,1]).reshape(2,3)print("a:") print(a)print("b:") print(b)print("a*b:") print(a*b)print("np.multiply(a,b):") print(np.multiply(a,b))print("np.dot(a,b.T)") print(np.dot(a,b.T))# 以下這個命令會出錯 print(np.dot(a,b))

結果:

a: [[1 2 3][4 5 6]] b: [[1 1 1][1 1 1]] a*b: [[1 2 3][4 5 6]] np.multiply(a,b): [[1 2 3][4 5 6]] np.dot(a,b.T) [[ 6 6][15 15]]

可以看到,a*b和np.multiply(a,b)的作用是一樣的,都是點乘,即兩個矩陣中相對應位置的數值相乘,element wise operation。它的輸出與相乘矩陣的尺寸一致。

而np.dot是標準的矩陣運算,。如果輸入是(3x2)x(2x4),則輸出為3x4。要求a的列數和b的行數一樣才能相乘,所以我們把b轉置了一下,b本身是2行3列,b.T就是3行2列,a是2行3列,結果是2行2列。所以,一定不要被np.dot這個函數名字迷惑了,它不是點乘的意思。

a=np.array([1,2,3]) b=np.array([1,1,1]).reshape(1,3) print(a.shape) print(a*b) a=a.reshape(3,1) print(a.shape) print(a*b)

結果:

(3,) [[1 2 3]] (3, 1) [[1 1 1][2 2 2][3 3 3]]

第一次定義a時,是一個1維列向量,shape=(3,),用a*b得到的結果是shape=(1,3)的矩陣[[1 2 3]]。
后來把a.reshape(3,1)3行1列的二維矩陣,雖然表面看起來形式沒變,但是在與b點乘后,得到了一個(3,3)的矩陣。
為了避免一些錯誤,最好在每次矩陣運算前,都把兩個矩陣reshape成一個二維矩陣(或多維矩陣)。

神經網絡中的計算過程

  • w=(3x2)
    w=np.array([1,2,3,4,5,6]).reshape(3,2)
[[1 2][3 4][5 6]]
  • b=(3x1)
    b=np.array([1,2,3]).reshape(3,1)
[[1][2][3]]
  • x=(2x4)(2個特征值,4個樣本)
    x=np.array([2,3,4,5,6,7,8,9]).reshape(2,4)
[[2 3 4 5][6 7 8 9]]
  • c=np.dot(w,x)
[[14 17 20 23][30 37 44 51][46 57 68 79]]
  • z=c+b = np.dot(w,x) + b
    注意:這里加法有對b的列廣播(自動擴充b為4x3,通過復制b的值為3列)
b= [[1 1 1 1][2 2 2 2][3 3 3 3]]z= [[15 18 21 24][32 39 46 53][49 60 71 82]]
  • y=np.array([6,5,4,3]).reshape(1,4)
    4個樣本的標簽值
[[6 5 4 3]]
  • dz = z - y
    注意:這里減法有對z的廣播(通過復制y的值為3行)
z= [[15 18 21 24][32 39 46 53][49 60 71 82]]y= [[6 5 4 3][6 5 4 3][6 5 4 3]]dz= [[ 9 13 17 21][26 34 42 50][43 55 67 79]]
  • db = dz.sum(axis=1,keepdims=True)/4
    4是樣本數。axis=1, 按列相加,即一行內的所有列元素相加。除以4是廣播。
[[15.][38.][61.]]
  • dw=np.dot(dz,x.T)/4
    x.T是x的轉置。除以4是廣播。 dz=3x4, x.T=4x2, 結果是3x2,正好是w的shape。
[[ 57.5 117.5][143. 295. ][228.5 472.5]]
  • w = w - 0.1*dw
[[ -4.75 -9.75][-11.3 -25.5 ][-17.85 -41.25]]
  • b = b - 0.1*db
[[-0.5][-1.8][-3.1]]

點擊這里學習更多神經網絡基本課程
點擊這里提交問題與建議

聯系我們: msraeduhub@microsoft.com
學習了這么多,還沒過癮怎么辦?歡迎加入“微軟 AI 應用開發實戰交流群”,跟大家一起暢談AI,答疑解惑。掃描下方二維碼,回復“申請入群”,即刻邀請你入群。

總結

以上是生活随笔為你收集整理的神经网络基本原理简明教程-0-Python-Numpy库的点滴的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。