Трудно воспроизвести ошибки кода С++ для задачи многомерной регрессии [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Трудно воспроизвести ошибки кода С++ для задачи многомерной регрессии [закрыто]

Сообщение Anonymous »

У нас есть код C++, который имеет несколько циклов for для решения задачи машинного обучения (в данном случае аналогично поддержке векторной регрессии). Проблема: есть некоторые проверки осуществимости, которые подходят при запуске изолированного экземпляра проблемы и не подходят, когда мы запускаем всю фазу перекрестной проверки. При использовании всей программы что-то нарушает возможность использования двойных переменных.
Мы не понимаем причину этого и не думаем, что это зависит от флагов g++. Valgrind не показал ошибок.
Код можно найти в репозитории S GitHub. Ошибочная программа на C++ — S.cpp (она состоит из более чем 1000 строк кода), и ее можно запустить с помощью:
./S admission.txt.shuf 1

Проверка осуществимости осуществляется (мы не можем выразить весь код функции, поскольку он содержит более 100 строк кода):
if ((a < -tol) || (a[j] < -tol) || (a > C * (i < l ? s :
ss[i-l]) + tol ) || (a[j] > C * (j < l ? s[j] : ss[j-l]) + tol )) {
printf("%lf, %lf, %lf, %lf\n", a, a[j], C * (i < l ? s : 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 = %lf, a[j] = %lf, C * ssss = %lf, C * ssss[j] = %lf\n", cases, a, a[j],
C * (i < l ? s : ss[i-l]), C * (j < l ? s[j] : ss[j-l]));
}

Где tol = 1E-7.
Через некоторое время он выведет некоторые недопустимые переменные.
Вопрос в том, : почему проверки подходят для конкретного экземпляра задачи (набора гиперпараметров), а для всей задачи (вычисление всех складок) и для одного и того же конкретного экземпляра — нет?
Мы попробовали несколько сеансов GDB, но они не смогли обнаружить дефекты.
Например, ошибки распечатываются как:
FOLD: 0, Hyper-parameters: gammaK = 1.0000e-02, gammaS = 1.0000e+00, C = 10000.000000, epsilon = 0.000000

-8516.713394, 11023.642043, 13104.170706, 11023.642043

nTotIter = 730434, CASE :0, ERRRORRRR CLIP ERROR NEW vars: i = 232, j = 596

CASE: 0, a = -8516.713394, a[j] = 11023.642043, C * ssss[i] = 13104.170706, C * ssss[j] = 11023.642043


Подробнее здесь: https://stackoverflow.com/questions/783 ... ssion-task
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»