Обучите нейронную сеть, чтобы обнаружить наиболее частый - PullRequest
1 голос
/ 01 мая 2019

Есть ли архитектура нейронной сети, которая может предсказать наиболее частое число на входе? Мне известно, что эту проблему можно решить с помощью классического языка программирования, такого как python, мне интересно узнать характерные особенности этой проблемы в мире нейронных сетей.

Предположим, что входные данные представляют собой массив N целых чисел в [0, M), а выходные данные представляют собой однократную кодировку размером N, которая представляет наиболее частые числа. Например, если входное значение равно x = [4,0,4,3,2,4], то выходное значение будет равно y = [1,0,1,0,0,1] (N=6 и M=5).

Я пробовал двухслойную сеть, которая прекрасно работает для небольших входов, но не может хорошо масштабироваться для больших входов, например, N=25 и M=10. Я подозреваю, что он запоминает все домены.

Любая идея по решению этой проблемы для большего размера, или что-либо, связанное с решением этого семейства проблем, приветствуется.

1 Ответ

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

Я думаю, вам нужно попробовать две вещи (единицы и эпохи):

1) Поиграйтесь с размером юнитов, для задания x = [4,0,4,3,2,4] будет достаточно использовать один слой с 3 юнитами:

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(3-9, activation=tf.keras.activations.relu, input_dim=1))
model.add(tf.keras.layers.Dense(1, activation=tf.keras.activations.linear))

2) А также для такой задачи я могу посоветовать просто установить много эпох, потому что это конкретная задача, и вашему NN нужно время, чтобы установить все параметры. Но также не устанавливайте много юнитов, потому что ваш NN часто может пойти другим путем.

Мой совет:

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(3-100, activation=tf.keras.activations.relu, input_dim=1))
model.add(tf.keras.layers.Dense(3-100, activation=tf.keras.activations.relu))
model.add(tf.keras.layers.Dense(1, activation=tf.keras.activations.linear))
model.compile(
    optimizer=tf.keras.optimizers.Adam(),
    loss=tf.keras.losses.mse,
    metrics=['accuracy']
)

model.fit(x_train, y_train,
          batch_size=1,
          epochs=1-infinity,
          verbose=1)
  • Активация Relu (юниты не умрут)
  • batch_size 1 -> для выполнения этой задачи вам необходимо использовать все входные данные

Итак, начните играть с одной эпохой, найдите лучшую точность и смотрите на LOSS (когда ваш LOSS будет маленьким, ваша точность будет быстро увеличиваться) в зависимости от того, сколько единиц. Чтобы найти наилучшее количество юнитов, установите столько эпох, сколько у вас есть времени (попробуйте 10, затем 50 ...).

Надеюсь, это поможет как-то. Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...