if (row[1] >= 0) or (row[1] >= 1000):
тут какая-то ошибка, очевидно. По-моему, второе условие никогда не сработает, т.к. является подмножеством первого; всегда, когда первое верно, верно и второе; когда первое неверно, неверно и второе.
Не любят у нас читать документацию. Вот и сейчас. Прочтите Правила!
И добавьте в вопрос свою попытку, как пробовали и что не получилось. Не важно, что код не рабочий.
А как вы пытались это сделать? Добавьте в вопрос свои попытки, даже неудачные. Потому что иначе ответ может быть правильным и бесполезным, вроде: «запрограммировать».
Интерпретатор в sublime работает со своими параметрами окоужения, в т.ч. path и env и т.п.
Думаю, в этом дело. Я не знаю, как оно там настраивается, нет опыта; но чую, где-то тут собака порылась.
Sergo Zar, рекомендую написать найденное вами решение чуть подробнее в виде ответа на вопрос, чтобы другие могли воспользоваться вашим опытом. Я помечу его как ответ.
Сергей Карбивничий, да, спасибо. Это я написал про совместимую версию, чтобы товарищ сразу обратил внимание, а не по получении соответствующего исключения.
К сожалению, я не спец в этих ваших нейронках и т.п., да и математику подзабыл радикально. Ниже некие мои размышления, возможно я чего-либо не так понял…
Размышления
@dooble, вы привели код некой функции. Функция должна принимать данные (data) и, очевидно, массив со значениями истинности.
Затем оно 1К раз запускает цикл эпох, который проходится по массиву из сцепленных значений из data и массива истинности, и применяет их к последовательности вычислений, результаты которых сохраняются в каждом цикле в одну и ту же переменную d_h_d_w1, которая всякий раз перезаписывается; кроме того, она является внутренней переменной функции и снаружи не видна.
Т.е. по факту мы при выполнении приведенного кода не получим вообще ничего.
Мне не совсем понятны некоторые нюансы:
Эта функция и есть вычисление частной производной, и в переменной d_h_d_w1 появляется результат для каждого значения матрицы?
По элементам какой именно матрицы надо прогнать эту функцию? Какой вид имеет эта матрица? Это data? Или это data + all_trues?
Тогда мы получаем каждый цикл из 1К массив значений d_h_d_w1, размерности как минимум равное количеству True в all_trues, а зачем это делать 1К раз? Я имею ввиду, каждый раз мы будем получать одно и то же.
Переменные W1, b1, W2, b2 уже содержат массивы случайных значений, которые одинаковы для каждого из 1К циклов.
В общем, мне думается, что во-первых, надо инициализацию переменных с random поместить внутрь цикла эпох; во-вторых, у меня стойкое ощущение, что результаты функции надо сохранять в массив (список, например); но так мы получим просто последний из 1К таких списков. Видимо, тут могут быть два пути:
Либо надо просто получить массив таких списков результатов функции (значит, функция просто должна возвращать этот список результатов), либо как-то использовать результаты предыдущих вычислений эпох в каждой следующей эпохе (значит, не только возвращать, но и принимать предыдущие списки результатов).
Поскольку я не совсем понимаю целевой алгоритм, и что приходит на вход, и что должно получиться на выходе, я не знаю, как именно надо дорабатывать код.
MinTnt, я в связи с этим задумался - когда меняется количество ответов в профиле? Когда я помечаю ответ ответом? Сейчас этого не наблюдаю. А раньше не обращал внимания.
Или через какое-то время? Может, кто-то дополнительно утверждает это действие?
Или база сбрасывает кеш далеко не сразу? В общем, надо внимательнее посмотреть.
MinTnt, я не знаю. Полагаю, мы нашли какой-то сбой. Возможно, в этот момент база данных тормознула и не очистила буфер, и повторно записала ответ; или ещё что-нибудь такое. Надо написать в поддержку.
MinTnt, я ж говорю, коварен немеренно.
Обращал внимание, что многие скилловые отвечающие злоупотребляют такими подходами, примерно с той же целью.
Я, в свою очередь, стараюсь в основном давать даже таким школьнозадачным вопрошающим ответы по возможности понятные для них. Да, некоторые их спишут не глядя. Но некоторые же прочтут и поймут... и не потратят лишних сил на расшифровку "петроглифов каменного века"... и это будет хорошо.
p.s. но ни в коем случае не навязываю, что так и надо! У каждого Абрама своя программа, у каждого Додика своя методика.
MinTnt, теперь вместо канделябра будешь бит всего лишь пипидастром.
Вот как это поддерживать?
Представь, что ты получаешь код, состоящий на треть из таких строк. Ты над каждой такой строкой вынужден задержаться и вчитаться. Осмыслить. Выматериться. Потом, вернувшись сюда после сотни других таких же строк, опять вчитаться, осмыслить, выматериться. И так всю дорогу. А автору строк будет каждый раз икаться.
Вот за такие кунштюки надо бить канделябром по чьей-то слишком заумной голове!
PEP-8
Always use a def statement instead of an assignment statement that binds a lambda expression directly to a name.
Yes:
def f(x): return 2*x
No:
f = lambda x: 2*x
The first form means that the name of the resulting function object is specifically 'f' instead of the generic ''. This is more useful for tracebacks and string representations in general. The use of the assignment statement eliminates the sole benefit a lambda expression can offer over an explicit def statement (i.e. that it can be embedded inside a larger expression)