Я делаю NN (маленький, который помогает мне учиться), и я хочу добавить самокорректирующийся прирост.Я знаю, что числа с плавающей запятой не точны, но есть ли способ сделать их такими.
Вот мой лучший способ сделать это:
while (T - W) != 0.0:
W = op
T = self.learn(list_in, list_out, W, inc)
if (T-W) < 0:
if alternate == 0:
alternate = -1
elif alternate == 1:
inc = inc/10
alternate = -1
elif (T-W) > 0:
if alternate == 0:
alternate = 1
elif alternate == -1:
inc = inc/10
alternate = 1
op = T
op - раньше облегчал мою жизнь,Я знаю, это выглядит плохо
T - расчетный вес
W - текущий вес
list_in / out - файл, который имитирует желаемые веса (будет публиковать, если вам это нужно)
inc - изначально 0,1
альтернативный - предполагается, что он используется для уменьшения приращения на десятую
, функция должна быть W * x, x - любое целое число, иW (вес) равен 2
Теперь, если мой вес изначально равен 30,0, на следующей итерации он будет равен 29,9, а на следующей итерации он будет равен 29,89999999999987 ... В результате мой NN вычисляет желаемыйвес равен 1.9999999999999885, что не соответствует действительности, и функция возвращает ложные результаты на 4-й итерации.(предполагается, что вход 3 должен возвращать 6, но он возвращает 5)
Я знаю, что плавающая точка 0,1 фактически сохраняется как 0,100000000000000000000123 или что-то в памяти, но есть ли способ, которым я могу «обрезать» ее, памятьчасти "123"?Я попытался округлить 29,899 ... и это работает, но если мой вес не должен быть целым числом, он никогда не пройдет, потому что он может рассчитать только целые числа.(Я сделал еще один тестовый файл со случайным числом W * x, где W - 2.01891564)
Чтобы уточнить: я не хочу распечатывать его и видеть «0.1», я хотел бы как-то убедитьсячто у меня есть только 0,1, без «лишних» битов памяти.Можно ли это сделать, и если нет, какой другой подход я могу попробовать?