训练神经网络以检测最频繁的输入

时间:2019-05-01 04:46:29

标签: tensorflow machine-learning neural-network

是否有任何神经网络体系结构可以预测输入中最频繁的数字?我知道可以使用像python这样的经典编程语言来解决此问题,我很想知道神经网络世界中该问题的特征。

让我们假设输入是N[0, M)个整数的数组,而输出是大小为N的单次热编码,表示最频繁的数字。例如,如果输入为x = [4,0,4,3,2,4],则输出为y = [1,0,1,0,0,1]N=6M=5)。

我尝试了一个两层网络,该网络对于较小的输入可以很好地工作,但是对于较大的输入(例如N=25M=10)则无法很好地扩展。我怀疑它会记住所有域。

任何有关解决此问题的想法都可以解决,或者与解决此类问题有关的任何想法。

1 个答案:

答案 0 :(得分:0)

我认为您需要尝试两件事(单元和纪元):

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)
  • 激活法(单位不会死亡)
  • batch_size 1->为此,您需要依靠所有输入

因此,开始玩一个纪元,找出最佳准确性,然后观察损失(当损失很小时,准确性会迅速提高),具体取决于多少个单位。找到最佳单位数量时,请根据需要设置尽可能多的时期(尝试10,然后尝试50 ...)。

希望,这会有所帮助。祝你好运!