【问题标题】:Neural network with one neuron not learning from a linear dataset一个神经元不从线性数据集中学习的神经网络
【发布时间】:2021-09-08 01:31:11
【问题描述】:

我正在学习使用 tensorflow 的神经网络,并创建了一个包含 1000 个实例的线性数据集。我试图用一个神经元制作一个简单的神经网络来从中学习,但我不知道为什么没有。由于是一个简单的线性数据集,我认为一个具有一个权重的神经元就足以更新值(在我的例子中为 10 号)。我究竟做错了什么?不知道问题是我创建的数据集还是什么?

这是我的第一次尝试:

from numpy.random import default_rng
import numpy as np
import tensorflow as tf

rng = default_rng()
X = rng.integers(low=-1000, high=1000, size=(1000,))
X = X.astype(np.float32)
y = X+10

model = tf.keras.Sequential()

model.add(tf.keras.layers.Dense(1, input_shape=(1,)))

model.compile(loss=tf.keras.losses.mae,
              optimizer=tf.keras.optimizers.SGD(learning_rate=0.01),
              metrics=tf.keras.metrics.mean_absolute_error)

model.fit(X, y, epochs=1000, verbose=0)
print(model.evaluate(X, y))

32/32 [==============================] - 0s 962us/step - loss: 1481.1342 - mean_absolute_error: 1481.1342
[1481.1341552734375, 1481.1341552734375]

然后我尝试用一​​个神经元再添加一层,但还是太大了。

from numpy.random import default_rng
import numpy as np
import tensorflow as tf

rng = default_rng()
X = rng.integers(low=-1000, high=1000, size=(1000,))
X = X.astype(np.float32)
y = X+10

model = tf.keras.Sequential()

model.add(tf.keras.layers.Dense(1, activation=tf.keras.activations.sigmoid, input_shape=(1,)))
model.add(tf.keras.layers.Dense(1))

model.compile(loss=tf.keras.losses.mae,
              optimizer=tf.keras.optimizers.SGD(learning_rate=0.01),
              metrics=tf.keras.metrics.mean_absolute_error)

model.fit(X, y, epochs=1000, verbose=0)
print(model.evaluate(X, y))


32/32 [==============================] - 0s 952us/step - loss: 443.7854 - mean_absolute_error: 443.7854
[443.7854309082031, 443.7854309082031]

但如果我改变数据集的大小,神经网络会很好地从中学习。

X = np.array([-7., -4., -1., 2., 5., 8., 11., 14.])
y = X + 10

这里有一个神经元的输出:

1/1 [==============================] - 0s 96ms/step - loss: 1.8599 - mean_absolute_error: 1.8599
[1.859947681427002, 1.859947681427002]

两个神经元的输出:

1/1 [==============================] - 0s 92ms/step - loss: 6.7571 - mean_absolute_error: 6.7571
[6.757119655609131, 6.757119655609131]

【问题讨论】:

    标签: python tensorflow neural-network


    【解决方案1】:

    学习率太大,设置为0.0001更小。更好的方法是使用 Adam

    model.compile(loss=tf.keras.losses.mae,
                  optimizer=tf.keras.optimizers.Adam(),
                  metrics=tf.keras.metrics.mean_absolute_error)
    

    【讨论】:

      猜你喜欢
      • 2016-07-11
      • 2019-04-10
      • 2019-03-15
      • 2011-08-17
      • 2020-10-29
      • 1970-01-01
      • 2016-11-28
      • 2013-04-22
      • 2018-10-05
      相关资源
      最近更新 更多