Как исправить "ошибку трансляции операндов" - PullRequest
0 голосов
/ 21 июня 2019

Я хотел найти градиент функции относительно переменной T. Я получаю сообщение об ошибке операнда. Почему я получаю эту ошибку и как ее исправить? l принимает значение от 0 до 4.

def grad(l,d1,d2):
      grad_T = 0
      b = 1
      w = np.ones(5,1)
      w.reshape(5,1)
      T = np.random.rand(46,5)
      D = np.random.rand(46,9063)
      if(y[d2]!=y[d1]):
                difVec = D[ : ,d2].astype(float) - D[ :,d1].astype(float)
                dify = 1
                if(y[d2]<y[d1]):
                dify = -1
                grad_T = grad_T + (-1*dify*w[l,0]*difVec)/(1+np.exp(dify( 
                w.transpose() @ T.transpose() @ difVec + b )))
      return(grad_T)

    Error
    <ipython-input-40-56571fb637a5> in grad(d1, d2)
    20                 if(y[d2]<y[d1]):
    21                     dify = -1
    ---> 22                     grad_T = grad_T + 
    (-1*dify*w[l,1]*difVec)/(1+np.exp(dify * ( w.transpose() @ 
    T.transpose() @ difVec + b )))

   ValueError: operands could not be broadcast together with shapes (46,) 
   (5,)

1 Ответ

0 голосов
/ 21 июня 2019

Здравствуйте и добро пожаловать на SO.

Прежде всего, ваш код вообще не может быть запущен. Ниже приведены исправления, чтобы заставить его работать. Для ошибки трансляции операнда продолжите ниже.

w = np.ones(5,1)) # excess right paranthesis here
# numpy.ones([5,1]) it should be a list of dimensions
w.reshape(5,1)


T.reshape(46,5) # unnecessary


D = np.random,rand(46, 9063) # random,rand 
# You meant random.rand I suppose

grad_T = grad_T + b
    (-1*dify*w[l,1]*difVec)/(1+np.exp(dify * ( w.transpose() @ 
    T.transpose() @ difVec + b )))
# This here will not work w is [5,1] you cannot index w[l, 1]
# It is definitely out of bounds. You meant w[l, 0] I suppose.

Ваш код работает на Colab . И все размеры вашей матрицы умножения были правильными. Я избавился от b, так как я не знаю его размера. b вероятно виновник ошибки, которую вы получаете. Ваш знаменатель имеет форму (46,) и ваш знаменатель (1,), если вы избавитесь от b. Вероятно, вы получаете ошибку, потому что b имеет форму (5,). Поскольку ваш w был [5,1], я предполагаю, что ваш уклон (b) имеет те же размеры. Таким образом, индексирование матрицы b решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...