国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

神經網絡(BP)算法Python實現及應用

來源:懂視網 責編:小OO 時間:2020-11-27 14:12:56
文檔

神經網絡(BP)算法Python實現及應用

本文實例為大家分享了Python實現神經網絡算法及應用的具體代碼,供大家參考,具體內容如下:首先用Python實現簡單地神經網絡算法。tanh';): ";";";神經網絡算法構造函數 :param layers: 神經元層數 :param activation: 使用的函數(默認tanh函數) :return:none ";";";if activation == ';logistic';: self.activation = logistic self.activation_deriv = logistic_derivative elif activation == ';tanh';"。
推薦度:
導讀本文實例為大家分享了Python實現神經網絡算法及應用的具體代碼,供大家參考,具體內容如下:首先用Python實現簡單地神經網絡算法。tanh';): ";";";神經網絡算法構造函數 :param layers: 神經元層數 :param activation: 使用的函數(默認tanh函數) :return:none ";";";if activation == ';logistic';: self.activation = logistic self.activation_deriv = logistic_derivative elif activation == ';tanh';"。
這篇文章主要為大家詳細介紹了Python實現神經網絡(BP)算法及簡單應用,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Python實現神經網絡算法及應用的具體代碼,供大家參考,具體內容如下

首先用Python實現簡單地神經網絡算法:

import numpy as np


# 定義tanh函數
def tanh(x):
 return np.tanh(x)


# tanh函數的導數
def tan_deriv(x):
 return 1.0 - np.tanh(x) * np.tan(x)


# sigmoid函數
def logistic(x):
 return 1 / (1 + np.exp(-x))


# sigmoid函數的導數
def logistic_derivative(x):
 return logistic(x) * (1 - logistic(x))


class NeuralNetwork:
 def __init__(self, layers, activation='tanh'):
 """
 神經網絡算法構造函數
 :param layers: 神經元層數
 :param activation: 使用的函數(默認tanh函數)
 :return:none
 """
 if activation == 'logistic':
 self.activation = logistic
 self.activation_deriv = logistic_derivative
 elif activation == 'tanh':
 self.activation = tanh
 self.activation_deriv = tan_deriv

 # 權重列表
 self.weights = []
 # 初始化權重(隨機)
 for i in range(1, len(layers) - 1):
 self.weights.append((2 * np.random.random((layers[i - 1] + 1, layers[i] + 1)) - 1) * 0.25)
 self.weights.append((2 * np.random.random((layers[i] + 1, layers[i + 1])) - 1) * 0.25)

 def fit(self, X, y, learning_rate=0.2, epochs=10000):
 """
 訓練神經網絡
 :param X: 數據集(通常是二維)
 :param y: 分類標記
 :param learning_rate: 學習率(默認0.2)
 :param epochs: 訓練次數(最大循環次數,默認10000)
 :return: none
 """
 # 確保數據集是二維的
 X = np.atleast_2d(X)

 temp = np.ones([X.shape[0], X.shape[1] + 1])
 temp[:, 0: -1] = X
 X = temp
 y = np.array(y)

 for k in range(epochs):
 # 隨機抽取X的一行
 i = np.random.randint(X.shape[0])
 # 用隨機抽取的這一組數據對神經網絡更新
 a = [X[i]]
 # 正向更新
 for l in range(len(self.weights)):
 a.append(self.activation(np.dot(a[l], self.weights[l])))
 error = y[i] - a[-1]
 deltas = [error * self.activation_deriv(a[-1])]

 # 反向更新
 for l in range(len(a) - 2, 0, -1):
 deltas.append(deltas[-1].dot(self.weights[l].T) * self.activation_deriv(a[l]))
 deltas.reverse()
 for i in range(len(self.weights)):
 layer = np.atleast_2d(a[i])
 delta = np.atleast_2d(deltas[i])
 self.weights[i] += learning_rate * layer.T.dot(delta)

 def predict(self, x):
 x = np.array(x)
 temp = np.ones(x.shape[0] + 1)
 temp[0:-1] = x
 a = temp
 for l in range(0, len(self.weights)):
 a = self.activation(np.dot(a, self.weights[l]))
 return a

使用自己定義的神經網絡算法實現一些簡單的功能:

小案例:

X: Y
0 0 0
0 1 1
1 0 1
1 1 0

from NN.NeuralNetwork import NeuralNetwork
import numpy as np

nn = NeuralNetwork([2, 2, 1], 'tanh')
temp = [[0, 0], [0, 1], [1, 0], [1, 1]]
X = np.array(temp)
y = np.array([0, 1, 1, 0])
nn.fit(X, y)
for i in temp:
 print(i, nn.predict(i))

發現結果基本機制,無限接近0或者無限接近1

第二個例子:識別圖片中的數字

導入數據:

from sklearn.datasets import load_digits
import pylab as pl

digits = load_digits()
print(digits.data.shape)
pl.gray()
pl.matshow(digits.images[0])
pl.show()

觀察下:大小:(1797, 64)

數字0

接下來的代碼是識別它們:

import numpy as np
from sklearn.datasets import load_digits
from sklearn.metrics import confusion_matrix, classification_report
from sklearn.preprocessing import LabelBinarizer
from NN.NeuralNetwork import NeuralNetwork
from sklearn.cross_validation import train_test_split

# 加載數據集
digits = load_digits()
X = digits.data
y = digits.target
# 處理數據,使得數據處于0,1之間,滿足神經網絡算法的要求
X -= X.min()
X /= X.max()

# 層數:
# 
輸出層10個數字 # 輸入層64因為圖片是8*8的,64像素 # 隱藏層假設100 nn = NeuralNetwork([64, 100, 10], 'logistic') # 分隔訓練集和測試集 X_train, X_test, y_train, y_test = train_test_split(X, y) # 轉化成sklearn需要的二維數據類型 labels_train = LabelBinarizer().fit_transform(y_train) labels_test = LabelBinarizer().fit_transform(y_test) print("start fitting") # 訓練3000次 nn.fit(X_train, labels_train, epochs=3000) predictions = [] for i in range(X_test.shape[0]): o = nn.predict(X_test[i]) # np.argmax:第幾個數對應最大概率值 predictions.append(np.argmax(o)) # 打印預測相關信息 print(confusion_matrix(y_test, predictions)) print(classification_report(y_test, predictions))

結果:

矩陣對角線代表預測正確的數量,發現正確率很多

這張表更直觀地顯示出預測正確率:

共450個案例,成功率94%

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

神經網絡(BP)算法Python實現及應用

本文實例為大家分享了Python實現神經網絡算法及應用的具體代碼,供大家參考,具體內容如下:首先用Python實現簡單地神經網絡算法。tanh';): ";";";神經網絡算法構造函數 :param layers: 神經元層數 :param activation: 使用的函數(默認tanh函數) :return:none ";";";if activation == ';logistic';: self.activation = logistic self.activation_deriv = logistic_derivative elif activation == ';tanh';"。
推薦度:
標簽: 應用 及應用 python
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 欧美成人高清视频 | 色婷婷综合在线 | 国产v片在线观看 | 国产成人精品久久 | 国产第四页 | 日本精品久久久一区二区三区 | a级毛片在线播放 | 亚洲国产精品综合久久一线 | 99国产精品高清一区二区二区 | 97久久精品一区二区三区 | 久久久久女人精品毛片九一 | 中文字幕一区二区三区在线观看 | 国产精品伊人 | 国产精品人成人免费国产 | 91久久精品国产91久久性色也 | 中文字幕久久亚洲一区 | 中文在线视频 | 亚洲视频在线免费观看 | 欧美色图日韩色图 | 国产全部视频在线播放 | 91精品国产亚一区二区三区 | 国产欧美综合在线观看第七页 | 日韩在线二区 | 国产欧美日韩精品在钱 | 欧美成人禁片在线观看网址 | 福利视频一区二区三区 | 国产盗摄精品一区二区三区 | 国产成人一区二区三区影院免费 | 久久伊人五月天 | 日韩va亚洲va欧美va浪潮 | 另类国产精品一区二区 | 国产精品免费在线播放 | 亚洲欧美一区二区三区不卡 | 香蕉成人啪国产精品视频综合网 | 国产精品成人va | 亚洲色图第1页 | 精品国产电影在线看免费观看 | 国产欧美一区二区精品久久久 | 久久久噜噜噜www成人网 | 国产日韩欧美一区二区三区视频 | 日韩av线上 |