在本文中,我們將了解單層感知器及其使用 TensorFlow 庫在Python中的實(shí)現(xiàn)。神經(jīng)網(wǎng)絡(luò)的工作方式與我們的生物神經(jīng)元的工作方式相同。
生物神經(jīng)元的結(jié)構(gòu)
生物神經(jīng)元具有三個(gè)基本功能
接收外部信號。
處理信號并增強(qiáng)是否需要發(fā)送信息。
將信號傳遞給目標(biāo)細(xì)胞,目標(biāo)細(xì)胞可以是另一個(gè)神經(jīng)元或腺體。
同樣,神經(jīng)網(wǎng)絡(luò)也能發(fā)揮作用。
機(jī)器學(xué)習(xí)中的神經(jīng)網(wǎng)絡(luò)
什么是單層感知器?
它是最古老且最早引入的神經(jīng)網(wǎng)絡(luò)之一。它是由弗蘭克·羅森布拉特 (Frank Rosenblatt)于1958 年提出的。感知器也稱為人工神經(jīng)網(wǎng)絡(luò)。感知器主要用于計(jì)算AND、OR、NOR等具有二進(jìn)制輸入和二進(jìn)制輸出的邏輯門。
感知器的主要功能是:-
從輸入層獲取輸入
對它們進(jìn)行加權(quán)并總結(jié)。
將總和傳遞給非線性函數(shù)以產(chǎn)生輸出。
單層神經(jīng)網(wǎng)絡(luò)
這里的激活函數(shù)可以是sigmoid、tanh、relu等任何函數(shù)。根據(jù)需求,我們將選擇最合適的非線性激活函數(shù)以產(chǎn)生更好的結(jié)果?,F(xiàn)在讓我們實(shí)現(xiàn)一個(gè)單層感知器。
單層感知器的實(shí)現(xiàn)
現(xiàn)在讓我們使用 TensorFlow 庫使用“MNIST”數(shù)據(jù)集實(shí)現(xiàn)一個(gè)單層感知器。
Step1:導(dǎo)入必要的庫
Numpy – Numpy 數(shù)組非常快,可以在很短的時(shí)間內(nèi)執(zhí)行大量計(jì)算。
Matplotlib – 該庫用于繪制可視化效果。
TensorFlow – 這是一個(gè)用于機(jī)器學(xué)習(xí)和人工智能的開源庫,提供一系列函數(shù)以通過單行代碼實(shí)現(xiàn)復(fù)雜的功能。
Python3
import numpy as np
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
%matplotlib inline
步驟 2:現(xiàn)在使用導(dǎo)入版本的張量流中的“Keras”加載數(shù)據(jù)集。
Python3
(x_train, y_train),\
(x_test, y_test) = keras.datasets.mnist.load_data()
步驟 3:現(xiàn)在顯示數(shù)據(jù)集中單個(gè)圖像的形狀和圖像。圖像大小包含28*28的矩陣,訓(xùn)練集長度為60,000,測試集長度為10,000。
Python3
len(x_train)
len(x_test)
x_train[0].shape
plt.matshow(x_train[0])
輸出:
來自訓(xùn)練數(shù)據(jù)集的樣本圖像
步驟 4:現(xiàn)在標(biāo)準(zhǔn)化數(shù)據(jù)集,以便快速準(zhǔn)確地進(jìn)行計(jì)算。
Python3
# Normalizing the dataset
x_train = x_train/255
x_test = x_test/255
# Flatting the dataset in order
# to compute for model building
x_train_flatten = x_train.reshape(len(x_train), 28*28)
x_test_flatten = x_test.reshape(len(x_test), 28*28)
第5步:構(gòu)建具有單層感知的神經(jīng)網(wǎng)絡(luò)。在這里我們可以觀察到,該模型是一個(gè)單層感知器,僅包含一個(gè)輸入層和一個(gè)輸出層,不存在隱藏層。
Python3
model = keras.Sequential([
keras.layers.Dense(10, input_shape=(784,),
activation='sigmoid')
])
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train_flatten, y_train, epochs=5)
輸出:
每個(gè)時(shí)期的訓(xùn)練進(jìn)度
步驟6:輸出模型在測試數(shù)據(jù)上的準(zhǔn)確率。
Python3
model.evaluate(x_test_flatten, y_test)
輸出:
測試數(shù)據(jù)上的模型性能