Функция стоимости нейронной сети - PullRequest
0 голосов
/ 20 февраля 2019

Следующий код - моя реализация нейронной сети (1 скрытый слой), пытающаяся предсказать некоторое число на основе входных данных.

  • Номер входного узла: 11
  • Числоузлов в скрытом слое: 11
  • Количество узлов в выходном слое: 1
  • m: количество обучающих примеров, здесь = 4527
  • X: [11, m] matrix
  • y: [1, m] matrix
  • w1: веса, связанные со входного слоя в скрытый слой
  • b1: вектор смещения, связанный со входным слоемдля скрытого слоя
  • w2: веса, связанные со скрытым слоем для выходного слоя
  • b2: вектор смещения, связанный со скрытым слоем для выходного слоя
  • alpha:скорость обучения
  • ite: число итераций, здесь = 10000

Поскольку я пытаюсь предсказать вывод непрерывного значения, я использую сигмовидную функцию во входных слоях ифункция тождественности в выходном слое

def propagate(X,y,w1,b1,w2,b2,alpha,ite):
    assert(X.shape[0] == 11)
    assert(y.shape[0] == 1)
    assert(X.shape[1] == y.shape[1])
    m = X.shape[1]
    J = np.zeros(shape=(ite,1))
    iteNo = np.zeros(shape=(ite,1))
    for i in range(1,ite+1):
        z1 = np.dot(w1,X) + b1
        a1 = sigmoid(z1)
        z2 = np.dot(w2,a1) + b2

        dz2 = (z2-y)/m
        dw2 = np.dot(dz2,a1.T)
        db2 = np.sum(dz2, axis=1, keepdims=True)
        dz1 = np.dot(w2.T,dz2)*derivative_of_sigmoid(z1)
        dw1 = np.dot(dz1,X.T)
        db1 = np.sum(dz1, axis=1, keepdims=True)

        w2 = w2 - (alpha*dw2)
        b2 = b2 - (alpha*db2)
        w1 = w1 - (alpha*dw1)
        b1 = b1 - (alpha*db1)

        iteNo[i-1] = i
        J[i-1] = np.dot((z2-y),(z2-y).T)/(2*m)

    print(z2)    
    return w1,b1,w2,b2,iteNo,J

Я пробовал оба способа (с feaнормализация и масштабирование и без), но моя функция стоимости меняется следующим образом в зависимости от количества итераций (график J). По оси x: номер итерации, по оси y: ошибка * 10 ^ 12

Пожалуйста, помогите!

...