【发布时间】:2016-03-02 22:27:54
【问题描述】:
我正在尝试通过使用带有逻辑激活函数的 delta 学习规则来实现单个神经元。我的代码如下。
import numpy as np
X = np.matrix('2; 4; 6; 8; 10; 15; 20; 25; 30; 40; 50; 60')
g = np.matrix('4.32323; 4.96276; 5.45565; 6.27151; 6.8552; 8.64987; 10.32581; 12.21393; 14.45659; 15.87602; 15.82488; 16.19419')
norm_fac=16.19419
y = [x / norm_fac for x in g]
class SingleNeuron (object):
def __init__(self, eta=0.01, n_iter=10):
self.eta=eta
self.n_iter=n_iter
def fit (self, X, y):
self.w_ = np.zeros (X.shape[1]+1)
self.cost_ = []
for i in range (self.n_iter):
output = self.net_input(X)
errors = (y - output)
self.w_[1:] += self.eta * X[0:].T.dot(errors)
self.w_[0] += self.eta * errors.sum ()
cost = (errors**2).sum() / 2.0
self.cost_.append(cost)
return self
def net_input(self, X):
return 1/(1+ np.exp (-(np.dot(X, self.w_[1]) + self.w_[0])))
def predict(self, X):
return self.net_input(X)
SN = SingleNeuron (eta = 0.1, n_iter = 10)
SN.fit (X, y)
但是,当我运行代码时,我遇到了错误: array_prepare 必须返回与其输入相同的 ndarray 或其子类。
我知道之前回答了一个问题 (Numpy __array_prepare__ error),但它对我没有多大帮助。我非常感谢任何帮助。谢谢
【问题讨论】:
-
尝试在第 4 行之后打印
y。这是您的预期吗? -
感谢您的评论。我期望的是使用 y 值来计算误差,然后修改 ws 直到 y 和输出之间的误差最小化。
-
我的意思是
y的格式。它不返回列表,而是返回矩阵列表,例如:[matrix([[ 0.26696179]]), matrix([[ 0.30645312]]), ...。这是你想让它做的吗? -
ooohh..对不起,误会了。不,这不是我想做的,我通过更改第 4 行 y=g/norm_fac 来纠正这部分。但是,现在我在第 29 行遇到了一个新错误(ValueError:具有形状 (1,) 的不可广播输出操作数与广播形状 (1,1) 不匹配)。我不确定是否需要将此作为另一个问题发布。再次感谢您的帮助。
-
我暂时尝试自己排查,打印中间输出,包括查看类型
print y, type(y)等。显然需要@左右的类型987654327@ 应该是可战斗的。您可以编辑您的问题。本节中的 cmets 旨在细化一个问题,直到它被很好地定义并且问题和答案对其他人有用。
标签: python numpy neural-network