Я думаю, что все, что вы пытаетесь сделать, это отобразить предсказанные вероятности классов обратно на метки классов. Каждая строка в списке выходных предсказаний содержит три вероятности предсказанных классов для ваших трех классов; Вы можете взять argmax
вдоль каждой строки, чтобы отобразить фактический прогнозируемый класс (то есть класс с наибольшей прогнозируемой вероятностью):
import numpy as np
predictions = [[0.3112209, 0.3690182, 0.31357136],
[0.31085992, 0.36959863, 0.31448898],
[0.31073445, 0.3703295, 0.31469804],
[0.31177694, 0.37011752, 0.3145326 ],
[0.31220382, 0.3692756, 0.31515726],
[0.31232828, 0.36947766, 0.3149037 ],
[0.31190437, 0.36756667, 0.31323162],
[0.31339088, 0.36542615, 0.310322 ],
[0.31598282, 0.36328828, 0.30711085]]
np.argmax(predictions, axis=1)
Дает:
array([1, 1, 1, 1, 1, 1, 1, 1, 1])
в этом случае класс 1 прогнозируется 9 раз.
Как отмечено в комментариях: именно это и делает Керас под капотом, как вы увидите в исходном коде .
Вызов cpp
напрямую, например
$ cat >foo.c <<EOF
#define FOO
#ifdef FOO
foo is defined
#else
foo is not defined
#endif
EOF
$ cpp foo.c
# 1 "foo.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "foo.c"
foo is defined
Конечно, если вы включите какие-либо заголовки, они будут включены в вывод. Один из способов избежать этого может заключаться в том, чтобы просто grep -v
исключить строки с #include
s (или, возможно, только строки с #include <
и разрешить ] #include "
). Или вы можете указать параметр -nostdinc
, чтобы удалить только стандартные включения (но, возможно, оставьте в локальных библиотеках, если вы не укажете пути включения, чтобы они не были найдены) - это предупредит об отсутствующих заголовках.
Изменить: Или используйте сам препроцессор, чтобы сделать включение заголовков условным, заключите их в нечто вроде #ifndef TESTING_PREPROCESSOR
и используйте -DTESTING_PREPROCESSOR
].
Если Вы просто хотите макрорасширения и пропускаете #include
обработка, можно попробовать этот repo. Это - ветвление оригинала pcpp . Я добавил --no-include
опция пропустить обработку #include
директива. Все другие макросы будут обработаны на основе Вашего входа marco к pcpp
.
gcc -E inputfile.c > outputfile.c
outputfile.c будет есть ваш предварительно обработанный код, но все макросы будут расширены.
Я считаю этот прием очень полезным при отладке компиляции больших систем с множеством включений, флагов компилятора и переменных make-файла. Он покажет включаемые файлы, у которых нет защиты заголовков, а также множество других проблем.