Форум программистов, компьютерный форум, киберфорум
Konst2016
Войти
Регистрация
Восстановить пароль

Альтернативная реализация функции evaluate для keras

Запись от Konst2016 размещена 09.04.2022 в 12:56
Показов 1391 Комментарии 0
Метки evaluate, keras, python, python3

Здравствуйте!В этой статье хочу показать как я альтернативно реализовал функцию evaluate для keras.Это функция оценки насколько точно модель предсказывает y по X.В нативной реализации она не подойдет для оценки one-hot векторов и я сделал свою реализацию для этих целей.Показано на примере xor.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# evaluate_.py
import numpy as np
 
def evaluate(model, X_test: list, Y_test: list, verbose=0):
    """
    Оценка набора в процентах
    X_test: матрица обучающего набора X, 2D матрица
    Y_test: матрица ответов Y, 2D матрица
    return точность в процентах
    """
    scores = []
    out_nn = None
    res_acc = 0
    rows_x_test = len(X_test)
    width_y_test = len(Y_test[0])
    elem_of_out_nn = 0
    elem_answer = 0
    is_vecs_are_equal = False
    for row in range(rows_x_test):
        x_test = X_test[row]
        y_test = Y_test[row]
        out_nn = model.predict(np.array([x_test]))
        out_nn=out_nn[0]
        for elem in range(width_y_test):
            elem_of_out_nn = out_nn[elem]
            elem_answer = y_test[elem]
            if elem_of_out_nn > 0.5:
                elem_of_out_nn = 1
                if verbose!=0:
                  print("output vector elem -> ( %f ) " % 1, end=' ')
                  print("expected vector elem -> ( %f )" % elem_answer, end=' ')
            else:
                elem_of_out_nn = 0
                if verbose!=0:
                  print("output vector elem -> ( %f ) " % 0, end=' ')
                  print("expected vector elem -> ( %f )" % elem_answer, end=' ')
            if elem_of_out_nn == elem_answer:
                is_vecs_are_equal = True
            else:
                is_vecs_are_equal = False
                break
        if is_vecs_are_equal:
            if verbose!=0:
               print("-Vecs are equal-")
            scores.append(1)
        else:
            if verbose!=0:
              print("-Vecs are not equal-")
            scores.append(0)
    res_acc = sum(scores) / rows_x_test * 100
 
    return res_acc # возвращает в процентах
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# app.py
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD
import numpy as np
from evaluate_ import evaluate 
 
X = np.array([[0,0],[0,1],[1,0],[1,1]])
y = np.array([[0],[1],[1],[0]])
 
model = Sequential()
model.add(Dense(8, input_dim=2))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
 
sgd = SGD(lr=0.1)
model.compile(loss='binary_crossentropy', optimizer=sgd)
 
model.fit(X, y , batch_size=1, nb_epoch=1000)
print(model.predict_proba(X))
print('model native evaluate', model.evaluate(X, y))
print('model my evaluate', evaluate(model, X, y, 1))
Вывод:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Epoch 997/1000
4/4 [==============================] - 0s 6ms/step - loss: 0.0016
Epoch 998/1000
4/4 [==============================] - 0s 5ms/step - loss: 0.0016
Epoch 999/1000
4/4 [==============================] - 0s 6ms/step - loss: 0.0016
Epoch 1000/1000
4/4 [==============================] - 0s 5ms/step - loss: 0.0016
[[0.00152593]
 [0.9985968 ]
 [0.998529  ]
 [0.00205984]]
4/4 [==============================] - 0s 0us/step
model native evaluate 0.0016163259278982878
output vector elem -> ( 0.000000 )  expected vector elem -> ( 0.000000 ) -Vecs are equal-
output vector elem -> ( 1.000000 )  expected vector elem -> ( 1.000000 ) -Vecs are equal-
output vector elem -> ( 1.000000 )  expected vector elem -> ( 1.000000 ) -Vecs are equal-
output vector elem -> ( 0.000000 )  expected vector elem -> ( 0.000000 ) -Vecs are equal-
model my evaluate 100.0
Метки evaluate, keras, python, python3
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru