ValueError: matmul: 输入操作数0的维度不足(有0维,gufunc核心签名要求(n?,k),(k,m?)->(n?,m?)需要1维)

我在学习编程和人工智能方面是新手,不知道如何解决这个问题。我通过YouTube学习编程,但那里没有提到这个问题。由于我是新手,我完全不知道如何解决这个问题,甚至不知道问题是什么 – 请帮帮我 D:

问题如下:

---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)<ipython-input-58-2d579b4cf5ca> in <module>()     16      17 ---> 18 train(neural_net, X, Y, l2_cost, 0.5)<ipython-input-58-2d579b4cf5ca> in train(neural_net, X, Y, l2_cost, lr)     11   #Forward pass - 前向传递     12   for l, layer in enumerate(neural_net):---> 13     z = out[-1][1] @ neural_net[l].W + neural_net[l].b     14     a = neural_net[l].act_f[0](z)     15     out.append((z, a))ValueError: matmul: Input operand 0 does not have enough dimensions (has 0, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 1)

我在Google Colab上编程 – 真的很需要帮助我的代码如下:”’

import numpy as npimport scipy as csimport matplotlib.pyplot as pltfrom sklearn.datasets import make_circles# 创建数据集n = 500 # 要分析的样本数量p = 2 # 样本的特征数量X, Y = make_circles(n_samples = n, factor = 0.5, noise=0.05)plt.scatter(X[Y == 0,0], X[Y == 0,1])plt.scatter(X[Y == 1,0], X[Y == 1,1], c = 'salmon')plt.show()# 神经网络层类class neural_layer():  def __init__(self, n_conn, n_neur, act_f):    self.act_f = act_f    self.b = np.random.rand(1, n_neur) * 2 - 1    self.W = np.random.rand(n_conn, n_neur) * 2 - 1# 激活函数sigm = (lambda x: 1 / (1 + np.e ** (-x)),       lambda x: x * (1 - x))relu = lambda x: np.maximum(0, x)_x = np.linspace(-5, 5, 100)plt.plot(_x, relu(_x))l0 = neural_layer(p, 4, sigm)l1 = neural_layer(4, 8, sigm)# 一直到无穷...def create_nn(topology, act_f):  nn = [] # 神经网络各层的容器  for l, layer in enumerate(topology[:-1]):    nn.append(neural_layer(topology[1], topology[l+1], act_f))  return nntopology = [p, 4, 8, 16, 8, 4, 1] # 网络拓扑neural_net = create_nn(topology, sigm)l2_cost = (lambda Yp, Yr: np.mean((Yp - Yr) ** 2), # 均方误差           lambda Yp, Yr: (Yp - Yr))def train(neural_net, X, Y, l2_cost, lr=0.5):  out = [(None, X)]  # 前向传递  for l, layer in enumerate(neural_net):    z = out[-1][1] @ neural_net[l].W + neural_net[l].b    a = neural_net[l].act_f[0](z)    out.append((z, a))train(neural_net, X, Y, l2_cost, 0.5)

”’


回答:

你试图乘以两个不兼容的矩阵。

W 的形状 = (4,4)

out[-1][1] 的形状 = (500,2)

在这一行

  z = out[-1][1] @ neural_net[l].W + neural_net[l].b

这是如何修复的

你需要更改下面的行,将“1”改为“l”

更改:

 nn.append(neural_layer(topology[1], topology[l+1], act_f))

 nn.append(neural_layer(topology[l], topology[l+1], act_f))

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注