【问题标题】:Neural network in keras and tensorflow for multiplying features用于乘法特征的 keras 和 tensorflow 中的神经网络
【发布时间】:2020-11-21 14:09:41
【问题描述】:

这个模型的想法是它通过神经网络学习执行两个特征的乘法,所以我创建了一个训练数据集,其中包含从 0 到 100 的随机数的乘法。因为这个想法是它学习乘法在任何情况下,我都创建了 a) 随机数最大为 100 和 b) 随机数从 1000 到 5000 的训练数据。

我为此创建了下面的神经网络,但是它与测试数据“b”不太吻合。

    model = tf.keras.Sequenenter code heretial()
    model.add(tf.keras.layers.Dense(units = 2,input_dim = 2))
    model.add(tf.keras.layers.Dropout(0.1))
    model.add(tf.keras.layers.Dense(units = 64,activation='relu'))
    model.add(tf.keras.layers.Dropout(0.1))
    model.add(tf.keras.layers.Dense(units = 32,activation='relu'))
    model.add(tf.keras.layers.Dense(units = 1))
    model.compile(optimizer='adam', loss = 'mean_squared_error')

与“a”测试数据相比,预测是有意义的。但是与测试数据“b”相比,它呈现出类似的曲线,但值非常遥远。

Data test x Data predict "a"

Data test x Data predict "b"

Data predict "b"

如果你想看我的完整代码: https://colab.research.google.com/drive/1rdAhZnHlxyXHHDF2D_grog05oDwYbXHa?usp=sharing

您能否帮助我的模型很好地泛化到比训练数据大得多的数据? 谢谢!

【问题讨论】:

  • 你好,你在规范化你的数据吗?
  • 是的,我用 MinMaxScaler () 和 RobustScaler () 试过了。还有其他关于标准化的建议吗?谢谢
  • 您通常不能假设神经网络在训练数据范围之外“正常工作”。如果您需要增加功能,我建议您手动完成。

标签: python tensorflow keras neural-network


【解决方案1】:

使用您在笔记本的 cmets 中提供的缩放比例会导致训练和测试数据的缩放比例不同。例如,如果您的训练数据中有一个 100 值,则它的标准化值在您的测试数据中应该是相同的,但现在情况并非如此。在您的案例中标准化数据的最简单方法是从头开始,例如这里

df = pd.DataFrame(data=a, columns=['a'])
df['b']= b
df['mult'] = df['a']*df['b']
# Scale your data here

无论如何,我不确定这是否能解决问题。

【讨论】:

  • 谢谢。我在指定位置应用了归一化,结果变得更加准确,但训练数据“b”仍然存在相同的行为。谢谢
  • 请注意,在测试网络时必须使用与训练相同的缩放比例。如果您为训练提供范围 [0,100] 并为测试提供一组 [0,50],则两者必须使用相同的比例因子。请注意,您还需要缩放标签。最后,如果你在 [0,100] 中训练你的网络,你不应该期望如果你提供的范围是 [100, 200],它会正常工作。我想这就是 xdurch0 的意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 2011-07-30
  • 2017-06-17
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
  • 2018-01-03
相关资源
最近更新 更多