總的來說就是,多層神經網路在任意的的隱層節點和專屬壓縮函式(看做非線性啟用函式),能夠逼近任意borel 測量函式.
首先實現乙個有多層線性層組成的神經網路:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import keras
from keras.models import sequential
from keras.layers import dense,dropout
from keras.optimizers import rmsprop
np.random.seed(1)
x1 =
2*np.random.normal(size =
(1000))
np.random.seed(10)
x2 = np.random.normal(size =
(1000))
x = np.array(
(x1,x2)).t
y = x1**2+
2*x2**2-
0.2*np.cos(
3*np.pi*x1)
-0.4
*np.cos(
4*np.pi*x2)
y = y.reshape(y.shape[0]
,1)def
standard
(data)
: mu = np.mean(data)
std = np.std(data)
return
(data - mu)
/std
x_scale = standard(x)
model = sequential(
)model.add(dense(
100, activation =
'linear'
, input_shape =(2
,)))
model.add(dense(
50, activation =
'linear'))
model.add(dense(
50, activation =
'linear'))
model.add(dense(
10, activation =
'linear'))
model.add(dense(
1, activation =
'linear'))
model.summary(
)model.
compile
(loss =
'mse'
, optimizer = rmsprop(),
)model.fit(x_scale, y, batch_size =
64, epochs =
1000
, verbose =0)
y_hap = model.predict(x_scale)
print
(np.
sum(np.square(y-y_hap)))
plt.plot(np.arange(
len(y)
),y,
'r')
plt.plot(np.arange(
len(y_hap)
),y_hap,
'g')
plt.legend(loc =
'best'
)plt.show(
)
結果: mse:40648。
結果很差。
結論
如果啟用函式是線性的,模型沒有擬合任意函式的能力。
如果採用 sigmoid 作為壓縮函式:
model = sequential(
)model.add(dense(
20, activation =
'sigmoid'
, input_shape =(2
,)))
#model.add(dropout(0.2))
model.add(dense(
20, activation =
'sigmoid'))
#model.add(dropout(0.2))
model.add(dense(
1, activation =
'linear'))
model.summary(
)
結果:
即使只使用乙個非線性啟用函式 relu,也有不錯效果:
model = sequential(
)model.add(dense(
100, activation =
'linear'
, input_shape =(2
,)))
model.add(dense(
50, activation =
'linear'))
model.add(dense(
50, activation =
'linear'))
model.add(dense(
10, activation =
'relu'))
model.add(dense(
1, activation =
'linear'))
model.summary(
)
結果:
結論:神經網路的啟用函式至少需要乙個是壓縮函式,才能具有較好的擬合能力。
參考:知乎問題 神經網路為什麼可以(理論上)擬合任何函式?;
知乎 神經網路的啟用函式都採用非線性函式,如閾值型或s型,為何不採用線性啟用函式呢?
神經網路擬合二元函式曲面實踐
andrew ng 深度學習課程的第一周第三次作業是實現乙個淺層神經網路,課程方給的框架很有意思,但該作業的輸出是類別,我想實踐一下該網路能否改造用來解決回歸問題,具體而言是擬合乙個函式z x2 y2 嘗試之後發現效果不是很穩定,容易收斂到區域性極小值,但擬合效果大體上還能接受,簡要分享,後續準備改...
神經網路實踐
inst2vec的實驗中,有許多難以理解的資料處理操作 比如,對資料進行shuffle,對引數進行l2正則化,截斷地產生正態分佈隨機數,對bias置為0,難以理解的原因 取樣上的策略,對為何採用這樣的策略不是很清楚 各種引數的影響 flags的鍋 tensorflow api的影響 tensorfl...
BP神經網路擬合sin
function 神經網路bp演算法 lnstree by 2012 include include include include include define ni 1 輸入層神經元 的個數 define nm 4 隱藏層神經元 的個數 define no 1 輸出層神經元 的個數 define...