【问题标题】:Train a neural network to detect the most frequent input训练神经网络以检测最频繁的输入
【发布时间】:2019-05-01 13:24:52
【问题描述】:

是否有任何神经网络架构可以预测输入中出现频率最高的数字?我知道这个问题可以使用像 python 这样的经典编程语言来解决,我很想知道这个问题在神经网络世界中的特点。

假设输入是[0, M) 中的N 整数数组,输出是大小为N 的单热编码,表示最常见的数字。例如,如果输入为x = [4,0,4,3,2,4],则输出为y = [1,0,1,0,0,1]N=6M=5)。

我尝试了一个两层网络,它适用于小输入,但它不能很好地扩展到较大的输入,例如 N=25M=10。我怀疑它可以记住所有域。

任何关于解决这个问题的更大尺寸的想法,或任何与解决这一系列问题相关的想法都表示赞赏。

【问题讨论】:

    标签: tensorflow machine-learning neural-network


    【解决方案1】:

    我认为您需要尝试两件事(单位和时期):

    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) 对于这样的任务,我建议只设置很多 epoch,因为它是特定任务,您的 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 -> 对于此任务,您需要依赖所有输入

    所以,开始玩一个 epoch 并找出最佳准确度并观察 LOSS(当您的 LOSS 变小时,您的准确度会迅速增加),具体取决于多少单位。当找到最佳单位数量时,设置尽可能多的 epoch(尝试 10,然后 50...)。

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

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 2018-10-30
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 2011-05-11
      相关资源
      最近更新 更多