у нас есть код C++, который имеет несколько циклов for для решения задачи машинного обучения (в данном случае аналогично регрессии опорных векторов). Проблема: есть некоторые проверки осуществимости, которые подходят при запуске изолированного экземпляра проблемы и не подходят, когда мы запускаем всю фазу перекрестной проверки. При использовании всей программы что-то нарушает возможность использования двойных переменных.
Мы не понимаем причину этого и не думаем, что это зависит от флагов g++.
Valgrind не показал ошибок.Код можно найти в репозитории S GitHub.
Ошибочная программа на C++ — S.cpp (она состоит из более чем 1000 строк кода), и ее можно запустить с помощью:
Код: Выделить всё
./S admission.txt.shuf 1
Код: Выделить всё
if ((a[i] < -tol) || (a[j] < -tol) || (a[i] > C * (i < l ? s[i] :
ss[i-l]) + tol ) || (a[j] > C * (j < l ? s[j] : ss[j-l]) + tol )) {
printf("%lf, %lf, %lf, %lf\n", a[i], a[j], C * (i < l ? s[i] : ss[i-l]), C * (j < l ? s[j] : ss[j-l]));
printf("nTotIter = %d, CASE :%d, ERRRORRRR CLIP ERROR NEW vars: i = %d, j = %d\n", nTotIter, cases, i, j);
printf("CASE: %d, a[i] = %lf, a[j] = %lf, C * ssss[i] = %lf, C * ssss[j] = %lf\n", cases, a[i], a[j],
C * (i < l ? s[i] : ss[i-l]), C * (j < l ? s[j] : ss[j-l]));
}
Через некоторое время он выведет некоторые недопустимые переменные.
Вопрос: зачем проверять в порядке в конкретном случае задачи (наборе гиперпараметров), а в целом в задаче (вычислении всех складок) и в одном и том же конкретном случае — нет?
Подробнее здесь: https://stackoverflow.com/questions/783 ... rning-task