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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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