從實踐看神經網路擬合任何函式

2021-09-19 05:47:51 字數 3186 閱讀 8642

總的來說就是,多層神經網路在任意的的隱層節點和專屬壓縮函式(看做非線性啟用函式),能夠逼近任意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...