動手學深度學習TF2 0第六課 多層感知機

2021-10-02 05:34:22 字數 2963 閱讀 7035

前面介紹的線性回歸和softmax回歸都是單層神經網路. 然而在深度學習中, 大多數是多層模型. 以下以多層感知機為例, 介紹多層神經網路.

多層感知機在單層神經網路的基礎上引入了1~n個隱藏層(hidden layer).隱藏層位於輸入層和輸出層之間.

上圖中含有乙個隱藏層,該層中有5個隱藏單元;

輸入層不參與計算,所以上圖中的多層感知機的層數為2;

上圖中的多層感知機隱藏層和輸出層都是全連線層;

設輸入樣本為x, 隱藏層輸出為h,隱藏層的有權重w1和偏差b1, 輸出層輸出為o.輸出層的權重和偏差引數為w2和偏差2.

h = x*w1+b1

o = h*w2+b2

==> o = (x*w1+b1)*w2+b2 = xw1w2+ b1*w2 + b2;

從最後式子的整理可以看出,即使新增再多的隱藏層,以上設計依然只能與僅含輸出層的單層神經網路等價(可將w1w2當做權重,偏差為b1w2 + b2).

上述問題的根源在與只對資料做了放射變換,而多個仿射變換的疊加仍然是乙個仿射變換.

於是,引入了非線性變換,例如對隱藏變數使用按照元素運算的非線性函式變換,然後再作為下乙個全連線層的輸入.這個非線性函式被稱為啟用函式.

relu函式就是只保留正數元素的同乙個非線性變換, 該函式定義為:

## 定義乙個繪圖函式xyplot

%matplotlib inline

import tensorflow as tf

from matplotlib import pyplot as plt

import numpy as np

import random

defuse_svg_display()

:# 用向量圖顯示

%config inlinebackend.figure_format =

'svg'

defset_figsize

(figsize=

(3.5

,2.5))

: use_svg_display(

)# 設定圖的尺寸

plt.rcparams[

'figure.figsize'

]= figsize

defxyplot

(x_vals, y_vals, name)

: set_figsize(figsize=(5

,2.5))

plt.plot(x_vals.numpy(

), y_vals.numpy())

plt.xlabel(

'x')

plt.ylabel(name +

'(x)'

)

// tf.nn 提供relu函式

x = tf.

variable

(tf.

range(-

8,8,

0.1)

, dtype=tf.float32)

y = tf.nn.

relu

(x)xyplot

(x, y,

'relu'

)// relu導數

with tf.

gradienttape

() as t:

t.watch

(x) y=y = tf.nn.

relu

(x)dy_dx = t.

gradient

(y, x)

xyplot

(x, dy_dx,

'grad of relu'

)

sigmoid函式可以將元素的值變換到0-1之間:

## tf.nn 提供sigmoid函式

y = tf.nn.sigmoid(x)

xyplot(x, y,

'sigmoid'

)## sigmoid函式的導數, 當輸入為0, sigmoid函式的導數達到最大值0.25

with tf.gradienttape(

)as t:

t.watch(x)

y=y = tf.nn.sigmoid(x)

dy_dx = t.gradient(y, x)

xyplot(x, dy_dx,

'grad of sigmoid'

)

tanh函式可以將元素的值變換到-1~1之間:

## tf.nn 提供tanh函式

y = tf.nn.tanh(x)

xyplot(x, y,

'tanh'

)## tanh函式的導數, 當輸入為0, tanh函式的導數達到最大值1;

with tf.gradienttape(

)as t:

t.watch(x)

y=y = tf.nn.tanh(x)

dy_dx = t.gradient(y, x)

xyplot(x, dy_dx,

'grad of tanh'

)

多層感知機就是含有至少乙個隱藏層的由全連線層組成的神經網路,且每個隱藏層的輸出通過啟用函式進行變換;

多層感知機的層數和各隱藏層中隱藏單元個數都是超引數(超引數: 使用者初始設定值,需要優化,不是通過訓練得到的(有些方法也開始對超引數進行訓練))。

新增啟用函式:

易語言學習第六課

知識點 1.輔助工具的使用 2.api函式 講了兩個,findwindow 查詢視窗控制代碼 和 getwindowrect 取視窗矩形 3.findwindow 兩個引數,第乙個為視窗的 類名,第二個表示視窗標籤,為0表示接受任何型別和標籤 3.getwindowrect 第乙個引數為視窗矩形,第...

機器學習第六課 聚類

聚類簡介 今天我們說聚類。說 機器學習 不說的 聚類 那還算是 機器學習 嗎?首先,我們回到混合高斯模型的那副圖 在n 3的高斯模型的擬合下,而三個不同模型會各自代表三個不同資料簇 cluster 將資料點劃分若干個簇的過程叫聚類。在這裡,我們可以挖掘出幾個隱藏資訊 1.聚類的目的其實是為了劃分資料...

OpenGL nehe教程第六課學習筆記

nehe的第六課的內容是給六面的盒子貼上材質texture,流程主要分兩步,一,利用glaux庫的函式auxdibimageload將從硬碟讀到記憶體,再利用opengl的函式檢測,給它打上 可用的標籤 二,學習將texture的座標與盒子的一面對齊,就像是小時候的貼紙,你要貼齊而且要方向正確。先來...