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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习入门之感知器(原理+代码)

發(fā)布時(shí)間:2025/3/15 pytorch 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习入门之感知器(原理+代码) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

感知器的原理:感知器的原理相當(dāng)簡單,當(dāng)線性可分的時(shí)候就是中學(xué)的時(shí)候?qū)W過的y=kx+b,只不過中學(xué)的時(shí)候k和b都是給出的,給我們x讓我們?nèi)デ髖,看看y是在這條直線的上方還是下方。而現(xiàn)在沒有給我們k和b,給我們了一大堆(x,y),讓我們根據(jù)這一大堆x和y求一條直線,這條直線最好能把這一大堆數(shù)據(jù)劃分為兩類(最大似然函數(shù)的思想,大學(xué)學(xué)過的p(|X)),并且要求這條直線兩邊的點(diǎn)最好離這條直線遠(yuǎn)一點(diǎn)(支持向量機(jī)就是基于此思想),因?yàn)檫@些點(diǎn)離這條直線遠(yuǎn)了,一些點(diǎn)被誤劃分的概率就會(huì)小很多。

感知器涉及到的相關(guān)公式

感知器的輸出

激活函數(shù)我們選擇階躍函數(shù)

感知器訓(xùn)練涉及到的公式即權(quán)重參數(shù)w和偏置項(xiàng)b的更新規(guī)則。

?

其中t是實(shí)際的值即label,y是我們輸入x訓(xùn)練出的值,n是學(xué)習(xí)率,用來調(diào)整學(xué)習(xí)的速率n值太大太小都不容易找到合適的w和b。

用感知器去實(shí)現(xiàn)與操作,代碼詳解

這一段我們寫好感知器的數(shù)據(jù)讀取,權(quán)重更新規(guī)則。

class Perceptron(object):def __init__(self, input_num, activator):'''初始化感知器,設(shè)置輸入?yún)?shù)的個(gè)數(shù),以及激活函數(shù)。激活函數(shù)的類型為double -> double'''self.activator = activator# 權(quán)重向量初始化為0self.weights = [0.0 for _ in range(input_num)]# 偏置項(xiàng)初始化為0self.bias = 0.0def __str__(self):'''打印學(xué)習(xí)到的權(quán)重、偏置項(xiàng)'''return 'weights\t:%s\nbias\t:%f\n' % (self.weights, self.bias)def predict(self, input_vec):'''輸入向量,輸出感知器的計(jì)算結(jié)果'''# 把input_vec[x1,x2,x3...]和weights[w1,w2,w3,...]打包在一起# 變成[(x1,w1),(x2,w2),(x3,w3),...]# 然后利用map函數(shù)計(jì)算[x1*w1, x2*w2, x3*w3]# 最后利用reduce求和return self.activator(reduce(lambda a, b: a + b,map(lambda (x, w): x * w, zip(input_vec, self.weights)), 0.0) + self.bias)def train(self, input_vecs, labels, iteration, rate):'''輸入訓(xùn)練數(shù)據(jù):一組向量、與每個(gè)向量對應(yīng)的label;以及訓(xùn)練輪數(shù)、學(xué)習(xí)率'''for i in range(iteration):self._one_iteration(input_vecs, labels, rate)def _one_iteration(self, input_vecs, labels, rate):'''一次迭代,把所有的訓(xùn)練數(shù)據(jù)過一遍'''# 把輸入和輸出打包在一起,成為樣本的列表[(input_vec, label), ...]# 而每個(gè)訓(xùn)練樣本是(input_vec, label)samples = zip(input_vecs, labels)# 對每個(gè)樣本,按照感知器規(guī)則更新權(quán)重for (input_vec, label) in samples:# 計(jì)算感知器在當(dāng)前權(quán)重下的輸出output = self.predict(input_vec)# 更新權(quán)重self._update_weights(input_vec, output, label, rate)def _update_weights(self, input_vec, output, label, rate):'''按照感知器規(guī)則更新權(quán)重'''# 把input_vec[x1,x2,x3,...]和weights[w1,w2,w3,...]打包在一起# 變成[(x1,w1),(x2,w2),(x3,w3),...]# 然后利用感知器規(guī)則更新權(quán)重delta = label - outputself.weights = map(lambda (x, w): w + rate * delta * x,zip(input_vec, self.weights))# 更新biasself.bias += rate * delta

接下來我們開始訓(xùn)練并測試

def f(x):'''定義激活函數(shù)f'''return 1 if x > 0 else 0 def get_training_dataset():'''基于and真值表構(gòu)建訓(xùn)練數(shù)據(jù)'''# 構(gòu)建訓(xùn)練數(shù)據(jù)# 輸入向量列表input_vecs = [[1,1], [0,0], [1,0], [0,1]]# 期望的輸出列表,注意要與輸入一一對應(yīng)# [1,1] -> 1, [0,0] -> 0, [1,0] -> 0, [0,1] -> 0labels = [1, 0, 0, 0]return input_vecs, labels def train_and_perceptron():'''使用and真值表訓(xùn)練感知器'''# 創(chuàng)建感知器,輸入?yún)?shù)個(gè)數(shù)為2(因?yàn)閍nd是二元函數(shù)),激活函數(shù)為fp = Perceptron(2, f)# 訓(xùn)練,迭代10輪, 學(xué)習(xí)速率為0.1input_vecs, labels = get_training_dataset()p.train(input_vecs, labels, 10, 0.1)#返回訓(xùn)練好的感知器return p if __name__ == '__main__': # 訓(xùn)練and感知器and_perception = train_and_perceptron()# 打印訓(xùn)練獲得的權(quán)重print and_perception# 測試print '1 and 1 = %d' % and_perception.predict([1, 1])print '0 and 0 = %d' % and_perception.predict([0, 0])print '1 and 0 = %d' % and_perception.predict([1, 0])print '0 and 1 = %d' % and_perception.predict([0, 1])

資料參考于:https://www.zybuluo.com/hanbingtao/note/433855

?

?

?

?

與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的深度学习入门之感知器(原理+代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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