Как построить нейронную сеть для умножения двух чисел - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь построить нейронную сеть, которая умножила бы 2 числа.Чтобы сделать то же самое, я воспользовался помощью scikit-learn.Я иду к нейронной сети с 2 скрытыми слоями (5, 3) и ReLU в качестве моей функции активации.

Я определил мой MLPRegressor следующим образом:

X = data.drop('Product', axis=1)
y = data['Product']
X_train, X_test, y_train, y_test = train_test_split(X, y)
scaler = StandardScaler()
scaler.fit(X_train)

X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
mlp = MLPRegressor(hidden_layer_sizes=(5, 3), activation="relu", learning_rate="adaptive", max_iter=500000, verbose=True, validation_fraction=0.25)

Здесь, data - это фрейм данных, который содержит 3 столбца, 2 случайных числа и 1 столбец продукта.Проблема в том, что потеря, которую я получаю, имеет порядок 10 ^ 14.Как мне уменьшить эту потерю, улучшить производительность моей модели и какие все возможные изменения могут помочь мне в этой ситуации?

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Есть способ сделать это.Это нейронная сеть, которая аппроксимирует функцию умножения для умножения чисел в диапазоне от 1000 до 10000, и она может очень хорошо работать, если диапазон чисел ограничен.Вот ссылка gist

0 голосов
/ 05 октября 2018

Я считаю, что NN только с двумя скрытыми слоями недостаточно для умножения произвольных чисел.Обратите внимание, что умножение N * M равно M-кратному сложению N. Есть нейронные сети, которые могут выполнять сложение, но вы должны учитывать общие условия.Кроме того, вы должны решить, как определяются входы и выходы вашей сети: хотите ли вы, чтобы два входных нейрона и один выходной нейрон или два мультипликатора были двоичными (как вектор) в сети?Я думаю, что вы должны были бы нормализовать ваши входные значения, если бы вы дали десятичные значения в двух входных нейронах.

...