亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

缺少的那一節

我用的python3.7,調整了視頻中的錯誤,函數的位置和命名問題,但是出現TypeError: can't multiply sequence by non-int of type 'float'這個錯誤,python3中不能這么寫嗎,以下為我的感知器類代碼

import numpy as np
class Perception(object):
??? '''
??? eta:學習率
??? n_iter:權重向量的訓練次數
??? w_:神經分叉權重向量
??? error_:記錄神經元判斷出錯次數
??? '''
??? def __init__(self,eta = 0.01,n_iter = 10):
??????? self.eta = eta
??????? self.n_iter = n_iter
??????? pass
??? def fit(self,x,y):
??????? '''
??????? 輸入訓練數據,訓練神經元,x輸入樣本向量,y對應樣本分類
??????? x:shape(n_samples,n_features)
??????? n_samples:樣本量
??????? n_feature:神經元分叉數量
??????? 例:x:[[1,2,3],[4,5,6]]
??????? n_samples:2
??????? n_feature:3
??????? y:[1,-1]
??????? '''
??????? '''
??????? 初始化權重向量為0
??????? 加一是因為將前面算法提到的w0,也就是步調函數閾值
??????? w_:權重向量
??????? error_:錯誤記錄向量
??????? '''
??????? self.errors_ = []
??????? self.w_ = np.zeros(1 + x.shape[1])
??????? for _ in range(self.n_iter):
??????????? errors = 0
??????????? for xi,target in zip(x,y):
??????????????? '''
??????????????? zip(x,y):[[1,2,3,1],[4,5,6,-1]]
??????????????? '''
??????????????? update = (self.eta) * (target - self.predict(xi))
??????????????? self.w_[1:] += update * xi
??????????????? self.w_[0] += update
??????????????? '''
??????????????? ▽w(n) = update * x[n]
??????????????? '''
??????????????? errors += int(update != 0.0)
??????????????? self.errors_.append(errors)
??????????????? pass
??????????? pass
??? def net_input(self,x):
??????? '''
??????? z = w0 * 1 + w1 * x1 +... +wn * xn
??????? '''
??????? z = np.dot(x,self.w_[1:]) + self.w_[0]
??????? return z
??????? pass
??? def predict(self,x):
??????? return np.where(self.net_input(x)>=0.0,1,-1)
??????? pass


正在回答

1 回答

我也用的python3.7,這是我的代碼,謝謝采納~

import?numpy?as?np

class?Perceptron(object):
????#?注釋1
????def?__init__(self,?eta?=?0.01,?n_iter?=?10):
????????self.eta?=?eta
????????self.n_iter?=?n_iter
????def?fit(self,?X,?y):
????????#?注釋2
????????self.w_?=?np.zeros(1?+?X.shape[1])
????????self.errors_?=?[]
????????for?_?in?range(self.n_iter):
????????????errors?=?0
????????????#?注釋3
????????????for?xi,?target?in?zip(X,?y):
????????????????update?=?self.eta?*?(target?-?self.predict(xi))
????????????????#?注釋4
????????????????self.w_[1:]?+=?update?*?xi
????????????????self.w_[0]?+=?update
????????????????errors?+=?int(update?!=?0.0)
????????????????self.errors_.append(errors)
????def?net_input(self,?X):
????????#?注釋5
????????return?np.dot(X,?self.w_[1:])?+?self.w_[0]
????def?predict(self,?X):
????????return?np.where(self.net_input(X)?>=?0.0,?1,?-1)
注釋1:
????eta:學習率
????n_iter:權重向量的訓練次數
????w_:神經分叉權重向量
????errors_:用于記錄神經元判斷出錯次數
注釋2:
????輸入訓練數據,培訓神經元,X是輸入樣本向量,y是對應的樣本分類
????X:shape[n_samples,?n_features]
????比如:X:[[1,?2,?3],?[4,?5,?6]]
????那么:n_samples:?2,n_features:?3,y:[1,?-1]

????初始化權重向量為0,加1是因為提到的w0,即步調函數的閾值
注釋3:
????比如:X:[[1,?2,?3],?[4,?5,?6]
????所以y:[1,?-1],zip(X,?y):[[1,?2,?3,?1].?[4,?5,?6,?-1]]

????update?=?n?*?(y?-?y')
注釋4:
????xi是一個向量
????update?*?xi等價于:[?w1?=?x1*update,?w2?=?x2*update,?...]
注釋5:
????z?=?w0*1?+?w1*x1?+?w2*x2?+?...?
????np.dot()是做點積


3 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

缺少的那一節

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號