ValueError:形状(50,50)和(3,1)不对齐:50(dim 1)!= 3(dim 0)

时间:2018-12-02 13:24:45

标签: python numpy machine-learning neural-network

我正在尝试创建第二个机器学习,但是我现在有一个非常烦人的问题。我不断收到此错误:

  

ValueError:形状(50,50)和(3,1)未对齐:50(dim 1)!= 3(dim 0)

我该如何解决错误?

我的神经网络

class neural_net:

def __init__(self):
    self.weight = 2 * np.random.random((3, 1)) - 1

def sigmoid(self, x):
    return 1/(1 + np.exp(-x))

def sigmoid_derivative(self, x):
    return x * (1 - x)

def train(self, training_input, training_output, iteration):
    for _ in range(iteration):
        output = self.think(training_input)
        error = training_output - output
        adjust = np.dot(training_input, error * self.sigmoid_derivative(output))
        self.weight += adjust

def think(self, input):
    input = input.astype(float)
    output = self.sigmoid(np.dot(input, self.weight))
    return output

X = train_data[len(train_data) - 1][0] -> [152 147 146 143 150 151 151 150 147 149 156 143 121  69  58 105  70  69

66 145 107 144 154 145 154 160 154 158 159 159 171 167 164 167 160 123 152  152 144 148 116 148 155 165 162 147 130 137 129 106 93]     Y = train_data [len(train_data)-1] [1]

nn = neural_net()
nn.train(X, Y, 3)

1 个答案:

答案 0 :(得分:0)

要相乘两个矩阵,第一个矩阵的列数必须等于第二个矩阵的行数。在您的情况下,X的列应等于self.weights的行。但是X的列数是50,而self.weights的行数是3。

在为神经网络定义权重时,应始终考虑输入和输出的通道。

如果输入的通道数为n,而输出的通道数为m,则权重的形状应为(n,m)。

从您访问X(train_data[len(train_data) - 1][0])的方式出发,X是形状(50,50)的单个样本。如果这是正确的,则必须先将X转换为矢量,然后再输入神经网络(假设您网络的输入层已完全连接到隐藏层)。 Y也一样。

X = X.reshape(1, -1) # X.shape == (1, 2500) 
Y = Y.reshape(1, -1) # Y.shape == (1, 2)

现在重量的形状应该是(2500,2)

self.weight = 2 * np.random.random((2500, 2)) - 1