簡體   English   中英

為什么神經網絡不學習曲線?

[英]Why is the neural network not learning the curve?

出於實驗目的,我使用 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如下:

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 共享,見

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

會有明顯的錯誤,有人可以幫忙嗎?

sigmoid激活 function 只能 output 值介於 0 和 1 之間。由於f(x)的所有值都是負數,因此無法學習 ZC1C425268E68385D1AB5074C17A94F4。

處理此問題的一種方法是將值簡單地標准化為[0, 1] 在您的情況下,只需學習f = lambda x: 1./(np.exp(10.*x)+1.)可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM