Как получить вес и уклон с минимальной общей ошибкой - PullRequest
0 голосов
/ 10 мая 2018

Вес1, Вес2, уклон1, уклон2 - случайный список:

  • list1= [[(list of Weight1)], [(list of Weight2)], [(list of bias1)], [list of bias2)]]
  • л ist2= [[(list of Weight1)], [(list of Weight2)], [(list of bias1)], [list of bias2)]]
  • list3= [[(list of Weight1)], [(list of Weight2)], [(list of bias1)], [list of bias2)]]

popSize = 3

Как получить вес и смещение (Weight1, Weight2, bias1, bias2) с минимальной общей ошибкой

def findGStar(Weight1, Weight2, bias1, bias2):
    z1 = X_trainNorm.dot(Weight1) + bias1
    a1 = np.tanh(z1)
    z2 = a1.dot(Weight2) + bias2
    target = np.reshape(y_trainNorm,(-1,1))
    error = 0
    error = abs(z2-target)
    tot_error = sum(error)
    return tot_error

vec = []
for i in range(popSize):
    vector_new = findGStar(vector[i][0], vector[i][1], vector[i][2], vector[i][3])
    vec.append(vector_new)
vec.sort()
minimum = vec[0]

1 Ответ

0 голосов
/ 10 мая 2018

После получения результатов pred_y_i функции, веса которой вы хотите оптимизировать, вы вычисляете MSE:

MSE = (1/N) * sum_i=1..N (y_i - pred_y_i)^2

Теперь вы используете алгоритм оптимизации по вашему выбору. Они могут использовать или дериват (градиентный спуск, метод Ньютона), или не иметь дериватов (оптимизация роя частиц).

Для оптимизаций, требующих деривации, требуется частичная деривация функции затрат (MSE) по отношению к весам. И обновлять веса в соответствии с некоторым критерием обновления (SGD, ADAM, Adagrad и т. Д.)

UPDATE

Чтобы выяснить, какой из трех списков имеет лучший набор весов по отношению к MSE:

for i in range(popSize):
    vector_new = findGStar(vector[i][0], vector[i][1], vector[i][2], vector[i][3])
    vec.append(vector_new)
list_id = np.argmin(vec)
print('List {} contains the best parameter.'.format(list_id+1))

При сортировке только списка vec вы теряете информацию о том, к какому списку относится каждая ошибка.

Когда мы впервые получаем вектор vec, индексы ошибок в vec соответствуют индексам list# в списке vector. Таким образом, мы можем просто выяснить, какой индекс содержит минимальную ошибку, и использовать этот индекс, чтобы получить list#.

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