Нахождение коэффициента «а» линейного уравнения вида Y = aX ⇐ Python
Нахождение коэффициента «а» линейного уравнения вида Y = aX
Предположим, у меня есть два набора, X и Y, и некоторый заранее известный коэффициент «а».
Набор Y зависит от X и «a» следующим образом: Y = аХ
импортировать numpy как np а = 2 X = np.random.randint(1, 10, 10) Y = а * Х печать(f"{X = }") печать(f"{Y = }") >>> X = массив([9, 2, 7, 8, 8, 9, 5, 8, 4, 1]) >>> Y = массив([18, 4, 14, 16, 16, 18, 10, 16, 8, 2]) Задача: Используя набор инструментов PyTorch, найдите коэффициент «a», используя только X и Y
Что я пытался сделать и в чем проблема:
Я пытаюсь передать X в модель и ожидаю получить от нее коэффициент a_pred. Затем я нахожу y_pred = a_pred * X. Наконец я сравниваю y и y_pred. Очевидно, что модель не «видит» взаимосвязь между a_pred, «a», y_pred и Y. Отсюда вопрос: какой должна быть архитектура модели, чтобы она могла найти правильный коэффициент «а»?
Я только начинаю изучать PyTorch и, к сожалению, пока не нашел однозначного ответа на этот вопрос. Пока мне кажется, что решение этой проблемы должно быть как-то связано с GAN, но как именно я, к сожалению, не знаю
Мой текущий код:
импортировать numpy как np из модуля импорта torch.nn, линейного, ReLU, последовательного, CrossEntropyLoss из torch.optim импортировать Адама из импорта факела from_numpy из случайного импорта randint класс FindParameter (Модуль): защита __init__(сам): супер(FindParameter, self).__init__() self.layers = Последовательный( Линейный(1, 10), РеЛУ(), Линейный(10, 100), РеЛУ(), Линейный(100, 10), РеЛУ(), Линейный(10, 1), ) защита вперед (я, ввод): вернуть self.layers(вход) а = 5,0 х = [] у = [] train_dataset_size = 10000 для меня в диапазоне (train_dataset_size): x.append(randint(0, 10000)) y.append(x * а) X = [from_numpy(np.array([c], dtype=np.float32)) для c в x] Y = [from_numpy(np.array([c], dtype=np.float32)) для c в y] A = from_numpy(np.array([a], dtype=np.float32)) эпохи = диапазон (100) модель = НайтиПараметр() loss_f = CrossEntropyLoss() оптимизатор = Адам(model.parameters(), lr=1e-3) для эпохи в эпохах: для x, y в zip(X, Y): оптимизатор.zero_grad() a_pred = модель (х) y_pred = a_pred * x потеря = loss_f(y_pred, y) потеря.назад() оптимизатор.шаг()
Предположим, у меня есть два набора, X и Y, и некоторый заранее известный коэффициент «а».
Набор Y зависит от X и «a» следующим образом: Y = аХ
импортировать numpy как np а = 2 X = np.random.randint(1, 10, 10) Y = а * Х печать(f"{X = }") печать(f"{Y = }") >>> X = массив([9, 2, 7, 8, 8, 9, 5, 8, 4, 1]) >>> Y = массив([18, 4, 14, 16, 16, 18, 10, 16, 8, 2]) Задача: Используя набор инструментов PyTorch, найдите коэффициент «a», используя только X и Y
Что я пытался сделать и в чем проблема:
Я пытаюсь передать X в модель и ожидаю получить от нее коэффициент a_pred. Затем я нахожу y_pred = a_pred * X. Наконец я сравниваю y и y_pred. Очевидно, что модель не «видит» взаимосвязь между a_pred, «a», y_pred и Y. Отсюда вопрос: какой должна быть архитектура модели, чтобы она могла найти правильный коэффициент «а»?
Я только начинаю изучать PyTorch и, к сожалению, пока не нашел однозначного ответа на этот вопрос. Пока мне кажется, что решение этой проблемы должно быть как-то связано с GAN, но как именно я, к сожалению, не знаю
Мой текущий код:
импортировать numpy как np из модуля импорта torch.nn, линейного, ReLU, последовательного, CrossEntropyLoss из torch.optim импортировать Адама из импорта факела from_numpy из случайного импорта randint класс FindParameter (Модуль): защита __init__(сам): супер(FindParameter, self).__init__() self.layers = Последовательный( Линейный(1, 10), РеЛУ(), Линейный(10, 100), РеЛУ(), Линейный(100, 10), РеЛУ(), Линейный(10, 1), ) защита вперед (я, ввод): вернуть self.layers(вход) а = 5,0 х = [] у = [] train_dataset_size = 10000 для меня в диапазоне (train_dataset_size): x.append(randint(0, 10000)) y.append(x * а) X = [from_numpy(np.array([c], dtype=np.float32)) для c в x] Y = [from_numpy(np.array([c], dtype=np.float32)) для c в y] A = from_numpy(np.array([a], dtype=np.float32)) эпохи = диапазон (100) модель = НайтиПараметр() loss_f = CrossEntropyLoss() оптимизатор = Адам(model.parameters(), lr=1e-3) для эпохи в эпохах: для x, y в zip(X, Y): оптимизатор.zero_grad() a_pred = модель (х) y_pred = a_pred * x потеря = loss_f(y_pred, y) потеря.назад() оптимизатор.шаг()
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение