gpt4 book ai didi

python - 为什么神经网络不学习曲线?

转载 作者:行者123 更新时间:2023-12-01 00:22:10 25 4
gpt4 key购买 nike

出于实验目的,我使用 tf.keras 构建一个神经网络,其中一个神经元附加到 sigmoid。要学习的目标曲线是:

#target function
f = lambda x: - 1./(np.exp(10.*x)+1.)

我从曲线上采样了一些点作为训练数据。

#creat training data

x_train = np.linspace(-1, 1, 111)
y_train = f(x_train)


#test data

x_test = np.linspace(-1, 1, 11)
y_test = f(x_test)

模型如下:

model = tf.keras.models.Sequential([
tf.keras.layers.Dense(1, activation='sigmoid', input_shape=(1,), use_bias=True)
])

model.compile(optimizer=tf.keras.optimizers.Adam(0.01),
loss='mse',
metrics=['MeanAbsoluteError'])

但它不学习曲线。测试代码为

x_test = np.linspace(-1, 1, 11)
plt.plot(x_test, f(x_test), label='true')
y_pred = model.predict(x_test)
plt.plot(x_test, y_pred, label='predict')
plt.legend()
plt.show()

enter image description here

代码由colab分享,参见

https://colab.research.google.com/drive/1LQ9MXjrMxsImc80o6wMk1oKfeadnNaG3

应该有明显的错误,有人可以帮忙吗?

最佳答案

sigmoid激活函数只能输出0到1之间的值。由于f(x)的所有值都是负数,因此该函数无法学习。

处理此问题的一种方法是将值简单地标准化为 [0, 1]。就您而言,只需学习 f = lambda x: 1./(np.exp(10.*x)+1.) 就可以了。

关于python - 为什么神经网络不学习曲线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58887284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com