Реализация классификатора SGD [ошибка: в Python скаляры можно преобразовать только массивы размера 1] - PullRequest
0 голосов
/ 01 августа 2020
def gradient_dw(x,y,w,b,alpha,N):
    '''In this function, we will compute the gardient w.r.to w '''
    wt=w.transpose()
    dw=x*(y-sigmoid(np.dot(wt,x)+b))-((alpha/N)*w)

    return dw

def logloss(y_true,y_pred):
    '''In this function, we will compute log loss '''
    n=len(y_true)
    loss=0
    for i in range(n):
        loss+=y_true[i]*math.log10(y_pred[i])+((1-y_true[i])*math.log10(1-y_pred[i]))
    loss=-(loss/n)

    return loss


 def gradient_db(x,y,w,b):
    '''In this function, we will compute gradient w.r.to b '''
    wt=w.transpose()
    db=y-sigmoid(np.dot(wt,x)+b)
    return db





def train(X_train,y_train,X_test,y_test,epochs,alpha,eta0,N):
    
        dim=X_train[0] 
        log_loss_train=[]
        log_loss_test=[]
        W=[]
        B=[]
        w,b = initialize_weights(dim)
        for i in range(epochs):
          for j in range(N):
            
            W.append([gradient_dw(X_train[j],y_train[j],w,b,alpha,N)])
            print("after w")
            B.append([gradient_db(X_train[j],y_train[j],w,b)])
            print("after b")

            print(j)
            #print(W)
            #print(B)
          
          y_train_predicted=pred(W,B,X_train)
          log_loss_train=logloss(y_train,y_predicted)
          train_loss.append([log_loss_train])

          y_test_predicted=pred(W,B,X_test)
          log_loss_test=logloss(y_test,y_predicted)
          test_loss.append([log_loss_test])




        return w,b

Пожалуйста, помогите мне в этом. Я получаю эту ошибку, и длина x_train предполагает 35000, вычисление останавливается на 34999.

в sigmoid (z) 2 '' 'В этой функции , мы вернем сигмоид z '' '3 # вычислим сигмоид (z) и вернем ----> 4 sig = 1 / (1 + math.exp (-z)) 5 return sig

TypeError : только массивы размера 1 могут быть преобразованы в Python скаляры

...