Выполните “легкий” препроцессор для GCC

Я думаю, что все, что вы пытаетесь сделать, это отобразить предсказанные вероятности классов обратно на метки классов. Каждая строка в списке выходных предсказаний содержит три вероятности предсказанных классов для ваших трех классов; Вы можете взять 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 раз.

Как отмечено в комментариях: именно это и делает Керас под капотом, как вы увидите в исходном коде .

15
задан AstroCB 2 November 2014 в 18:59
поделиться

4 ответа

Вызов 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 ].

14
ответ дан 1 December 2019 в 03:34
поделиться

Если Вы просто хотите макрорасширения и пропускаете #include обработка, можно попробовать этот repo. Это - ветвление оригинала pcpp . Я добавил --no-include опция пропустить обработку #include директива. Все другие макросы будут обработаны на основе Вашего входа marco к pcpp.

0
ответ дан 1 December 2019 в 03:34
поделиться
gcc  -E inputfile.c > outputfile.c

outputfile.c будет есть ваш предварительно обработанный код, но все макросы будут расширены.

Я считаю этот прием очень полезным при отладке компиляции больших систем с множеством включений, флагов компилятора и переменных make-файла. Он покажет включаемые файлы, у которых нет защиты заголовков, а также множество других проблем.

1
ответ дан 1 December 2019 в 03:34
поделиться
cpp -nostdinc program.c
3
ответ дан 1 December 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: