神经网络 Python
Neural Networks Python
我正在尝试构建一个简单的神经网络,它从一个包含 500 行数据的 xls 文件中获取 8 个输入和 2 个输出,矩阵 (8, 2) 中有 2 个隐藏权重。目前,神经元还没有开始学习任何东西。它只是一个示例代码,使其 运行 用于随机权重。这是我的代码
def sigmoid(x,deriv=False):
if(deriv==True):
return sigmoid(x,False)*(1-sigmoid(x,False))
return 1/(1+np.exp(-x))
def neuron(inputs, weights):
weighted_input = np.dot(inputs, weights)
return sigmoid(weighted_input, False)
weights = 2 * np.random.random((8,2)) - 1
W = np.array([weights])
error1 = []
for i in range(500):
for k in range (2):
X = X_T[i] #list of 8 Inputs from xls
T = T_T[i] #list of 2 outputs from xls
Y = neuron(X, W)[k]
error1.append(np.sqrt((Y[k] - T) ** 2))
print W
print np.average(error1)
pl.plot(error1)
我希望此代码 运行 用于目前随机的两个隐藏权重。这就是为什么我将 k 的范围设置为 2。但是当我尝试 运行 这个时,我得到以下错误。
IndexError Traceback (most recent call last)
<ipython-input-36-b300ce507da8> in <module>()
20 X = X_T[i]
21 T = T_T[i]
---> 22 Y = neuron(X, W)[k]
23 error1.append(np.sqrt((Y[k] - T) ** 2))
24
IndexError: index 1 is out of bounds for axis 0 with size 1
我知道我弄乱了循环。但我不知道如何解决这个问题。
在Y = neuron(X, W)[k]
中:
neuron(X, W) 是 return 一个浮点值。所以你得到错误。
如果neuron(X, W)
是return一个list/tuple...so on
,可以通过索引取值。
示例:
>>> L = [1,2][0]
>>> L
1
>>>
在循环中执行它是相当低效的。这段代码受益于优化的矩阵操作,如果我理解正确的话,它应该可以大致满足您的要求。
import numpy as np
def sigmoid(x,deriv=False):
if(deriv==True):
s = sigmoid(x,False)
return s*(1-s)
return 1/(1+np.exp(-x))
n_in = 8
n_out = 2
n_data = 500
X = np.random.randn( n_data, n_in )
T = np.random.randn( n_data, n_out )
W = np.random.randn( n_out, n_in )
b = np.random.randn( n_out, )
err = ( sigmoid( np.dot(X, W.T) + b ) - T ) ** 2
我正在尝试构建一个简单的神经网络,它从一个包含 500 行数据的 xls 文件中获取 8 个输入和 2 个输出,矩阵 (8, 2) 中有 2 个隐藏权重。目前,神经元还没有开始学习任何东西。它只是一个示例代码,使其 运行 用于随机权重。这是我的代码
def sigmoid(x,deriv=False):
if(deriv==True):
return sigmoid(x,False)*(1-sigmoid(x,False))
return 1/(1+np.exp(-x))
def neuron(inputs, weights):
weighted_input = np.dot(inputs, weights)
return sigmoid(weighted_input, False)
weights = 2 * np.random.random((8,2)) - 1
W = np.array([weights])
error1 = []
for i in range(500):
for k in range (2):
X = X_T[i] #list of 8 Inputs from xls
T = T_T[i] #list of 2 outputs from xls
Y = neuron(X, W)[k]
error1.append(np.sqrt((Y[k] - T) ** 2))
print W
print np.average(error1)
pl.plot(error1)
我希望此代码 运行 用于目前随机的两个隐藏权重。这就是为什么我将 k 的范围设置为 2。但是当我尝试 运行 这个时,我得到以下错误。
IndexError Traceback (most recent call last)
<ipython-input-36-b300ce507da8> in <module>()
20 X = X_T[i]
21 T = T_T[i]
---> 22 Y = neuron(X, W)[k]
23 error1.append(np.sqrt((Y[k] - T) ** 2))
24
IndexError: index 1 is out of bounds for axis 0 with size 1
我知道我弄乱了循环。但我不知道如何解决这个问题。
在Y = neuron(X, W)[k]
中:
neuron(X, W) 是 return 一个浮点值。所以你得到错误。
如果neuron(X, W)
是return一个list/tuple...so on
,可以通过索引取值。
示例:
>>> L = [1,2][0]
>>> L
1
>>>
在循环中执行它是相当低效的。这段代码受益于优化的矩阵操作,如果我理解正确的话,它应该可以大致满足您的要求。
import numpy as np
def sigmoid(x,deriv=False):
if(deriv==True):
s = sigmoid(x,False)
return s*(1-s)
return 1/(1+np.exp(-x))
n_in = 8
n_out = 2
n_data = 500
X = np.random.randn( n_data, n_in )
T = np.random.randn( n_data, n_out )
W = np.random.randn( n_out, n_in )
b = np.random.randn( n_out, )
err = ( sigmoid( np.dot(X, W.T) + b ) - T ) ** 2