错误消息:ValueError。为什么会这样?
我正在从我买的书中学习神经网络。我已经从那本书中复制了代码,但是不知何故,它不断给我该错误消息。
非常感谢您!
。
import numpy
import scipy
class neuralNetwork:
def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
self.inodes = inputnodes
self.hnodes = hiddennodes
self.onodes = outputnodes
self.wih = (numpy.random.rand(self.hnodes, self.inodes) -0,5)
self.who = (numpy.random.rand(self.onodes, self.hnodes) -0,5)
self.lr = learningrate
self.activation_function= lambda x: scipy.special.expit(x)
pass
def train():
pass
def query(self, inputs_list):
inputs = numpy.array(inputs_list, ndmin=2).T
hidden_inputs = numpy.dot(self.wih, inputs)
hidden_outputs = self.activation_function(hidden_inputs)
final_inputs = numpy.dot(self.who, hidden_outputs)
final_outputs = self.activation_function(final_inputs)
return final_outputs
pass
input_nodes = 3
hidden_nodes = 3
output_nodes = 3
learning_rate = 0,3
n = neuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)
n.query([1, 1, 1])
我期望一个数组作为输出。
hidden_inputs = numpy.dot(self.wih, inputs)
ValueError:设置具有序列的数组元素。
答案 0 :(得分:0)
您收到的错误是由于以下几行:
self.wih = (numpy.random.rand(self.hnodes, self.inodes) -0,5)
self.who = (numpy.random.rand(self.onodes, self.hnodes) -0,5)
(numpy.random.rand(self.hnodes, self.inodes) -0,5)
是一个元组,您正在尝试使用类型inputs
的{{1}}执行元组的点积。
因此,为了摆脱错误更改
numpy.ndarray
到self.wih = (numpy.random.rand(self.hnodes, self.inodes) -0,5)
和self.wih = (numpy.random.rand(self.hnodes, self.inodes) -0.5)
至self.who = (numpy.random.rand(self.onodes, self.hnodes) -0,5)
。
初始化self.who = (numpy.random.rand(self.onodes, self.hnodes) -0.5)
变量的行也存在错误,即
learning_rate
。
应为learning_rate = 0,3
。虽然,您还没有在计算中使用它。
答案 1 :(得分:0)
发生ValueError的原因是您试图执行元组与向量(输入向量)的点积。
我还注意到,您正在传递learning_rate = 0,3
,而您期望学习率在类主体中为整数或浮点型。这使我认为您正在阅读的书中的圆点(。)可能被误打印为逗号(,)。这可能是一个问题。
一旦用点修复了三个逗号,就可以看到代码运行。
这是下面的完整代码:
import numpy
import scipy
from scipy import special
class neuralNetwork:
def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
self.inodes = inputnodes
self.hnodes = hiddennodes
self.onodes = outputnodes
self.wih = (numpy.random.rand(self.hnodes, self.inodes)-0.5)
self.who = (numpy.random.rand(self.onodes, self.hnodes)-0.5)
self.lr = learningrate
self.activation_function= lambda x: scipy.special.expit(x)
pass
def train():
pass
def query(self, inputs_list):
inputs = numpy.array(inputs_list, ndmin=2).T
print(self.wih[0].shape)
hidden_inputs = numpy.dot(self.wih, inputs)
hidden_outputs = self.activation_function(hidden_inputs)
final_inputs = numpy.dot(self.who, hidden_outputs)
final_outputs = self.activation_function(final_inputs)
return final_outputs
pass
input_nodes = 3
hidden_nodes = 3
output_nodes = 3
learning_rate = 0.3
n = neuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)
n.query([1,1,1])
此外,在向SO发布问题时,请添加一些上下文。这将有助于我们了解您要实现的目标,而不仅仅是解决编译时错误。
希望有帮助。