Python 为什么神经网络不能学习曲线?

Python 为什么神经网络不能学习曲线?,python,tensorflow,Python,Tensorflow,出于实验目的,我使用tf.keras构建了一个神经网络,其中一个神经元连接到乙状结肠。要学习的目标曲线是: #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

出于实验目的,我使用tf.keras构建了一个神经网络,其中一个神经元连接到乙状结肠。要学习的目标曲线是:

#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()

代码由colab共享,请参阅


应该有明显的错误,任何人都可以帮助?

sigmoid激活功能只能输出0到1之间的值。由于
f(x)
的所有值均为负值,因此无法读入该函数


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

请在问题中包含您的代码和任何输出;不是作为链接。