【发布时间】: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