導航:首頁 > 編程語言 > pythontanh

pythontanh

發布時間:2023-05-04 11:43:20

⑴ 入門 | 一文簡述循環神經網路

入門 | 一文簡述循環神經網路

本文簡要介紹了什麼是循環神經網路及其運行原理,並給出了一個 RNN 實現示例。

什麼是循環神經網路(RNN)?它們如何運行?可以用在哪裡呢?本文試圖回答上述這些問題,還展示了一個 RNN 實現 demo,你可以根據自己的需要進行擴展。

循環神經網路架構

基礎知識。python、CNN 知識是必備的。了解 CNN 的相關知識,是為了與 RNN 進行對比:RNN 為什麼以及在哪些地方比 CNN 更好。

我們首先從「循環」(Recurrent)這個詞說起。為什麼將其稱為循環?循環的意思是:

經常或重復出現

將這類神經網路稱為循環神經網路是因為它對一組序列輸入重復進行同樣的操作。本文後續部分將討論這種操作的意義。

我們為什麼需要 RNN?

也許你現在想的是,已經有像卷積網路這樣表現非常出色的網路了,為什麼還需要其他類型的網路呢?有一個需要用到 RNN 的特殊例子。為了解釋 RNN,你首先需要了解序列的相關知識,我們先來講一下序列。

序列是相互依賴的(有限或無限)數據流,比如時間序列數據、信息性的字元串、對話等。在對話中,一個句子可能有一個意思,但是整體的對話可能又是完全不同的意思。股市數據這樣的時間序列數據也是,單個數據表示當前價格,但是全天的數據會有不一樣的變化,促使我們作出買進或賣出的決定。

當輸入數據具有依賴性且是序列模式時,CNN 的結果一般都不太好。CNN 的前一個輸入和下一個輸入之間沒有任何關聯。所以所有的輸出都是獨立的。CNN 接受輸入,然後基於訓練好的模型輸出。如果你運行了 100 個不同的輸入,它們中的任何一個輸出都不會受之前輸出的影響。但想一下如果是文本生成或文本翻譯呢?所有生成的單詞與之前生成的單詞都是獨立的(有些情況下與之後的單詞也是獨立的,這里暫不討論)。所以你需要有一些基於之前輸出的偏向。這就是需要 RNN 的地方。RNN 對之前發生在數據序列中的事是有一定記憶的。這有助於系統獲取上下文。理論上講,RNN 有無限的記憶,這意味著它們有無限回顧的能力。通過回顧可以了解所有之前的輸入。但從實際操作中看,它只能回顧最後幾步。

本文僅為了與人類大體相關聯,而不會做任何決定。本文只是基於之前關於該項目的知識做出了自己的判斷(我甚至尚未理解人類大腦的 0.1%)。

何時使用 RNN?

RNN 可用於許多不同的地方。下面是 RNN 應用最多的領域。

1. 語言建模和文本生成

給出一個詞語序列,試著預測下一個詞語的可能性。這在翻譯任務中是很有用的,因為最有可能的句子將是可能性最高的單片語成的句子。

2. 機器翻譯

將文本內容從一種語言翻譯成其他語言使用了一種或幾種形式的 RNN。所有日常使用的實用系統都用了某種高級版本的 RNN。

3. 語音識別

基於輸入的聲波預測語音片段,從而確定詞語。

4. 生成圖像描述

RNN 一個非常廣泛的應用是理解圖像中發生了什麼,從而做出合理的描述。這是 CNN 和 RNN 相結合的作用。CNN 做圖像分割,RNN 用分割後的數據重建描述。這種應用雖然基本,但可能性是無窮的。

5. 視頻標記

可以通過一幀一幀地標記視頻進行視頻搜索。

深入挖掘

本文按照以下主題進行。每一部分都是基於之前的部分進行的,所以不要跳著讀。

前饋網路循環網路循環神經元基於時間的反向傳播(BPTT)RNN 實現

前饋網路入門

前饋網路通過在網路的每個節點上做出的一系列操作傳遞信息。前饋網路每次通過每個層直接向後傳遞信息。這與其他循環神經網路不同。一般而言,前饋網路接受一個輸入並據此產生輸出,這也是大多數監督學習的步驟,輸出結果可能是一個分類結果。它的行為與 CNN 類似。輸出可以是以貓狗等作為標簽的類別。

前饋網路是基於一系列預先標注過的數據訓練的。訓練階段的目的是減少前饋網路猜類別時的誤差。一旦訓練完成,我們就可以用訓練後的權重對新批次的數據進行分類。

一個典型的前饋網路架構

還有一件事要注意。在前饋網路中,無論在測試階段展示給分類器的圖像是什麼,都不會改變權重,所以也不會影響第二個決策。這是前饋網路和循環網路之間一個非常大的不同。

與循環網路不同,前饋網路在測試時不會記得之前的輸入數據。它們始終是取決於時間點的。它們只會在訓練階段記得歷史輸入數據。

循環網路

也就是說,循環網路不僅將當前的輸入樣例作為網路輸入,還將它們之前感知到的一並作為輸入。

我們試著建立了一個多層感知器。從簡單的角度講,它有一個輸入層、一個具備特定激活函數的隱藏層,最終可以得到輸出。

多層感知器架構示例

如果在上述示例中的層數增加了,輸入層也接收輸入。那麼第一個隱藏層將激活傳遞到下一個隱藏層上,依此類推。最後到達輸出層。每一個隱藏層都有自己的權重和偏置項。現在問題變成了我們可以輸入到隱藏層嗎?

每一層都有自己的權重(W)、偏置項(B)和激活函數(F)。這些層的行為不同,合並它們從技術層面上講也極具挑戰性。為了合並它們,我們將所有層的權重和偏置項替換成相同的值。如下圖所示:

現在我們就可以將所有層合並在一起了。所有的隱藏層都可以結合在一個循環層中。所以看起來就像下圖:

我們在每一步都會向隱藏層提供輸入。現在一個循環神經元存儲了所有之前步的輸入,並將這些信息和當前步的輸入合並。因此,它還捕獲到一些當前數據步和之前步的相關性信息。t-1 步的決策影響到第 t 步做的決策。這很像人類在生活中做決策的方式。我們將當前數據和近期數據結合起來,幫助解決手頭的特定問題。這個例子很簡單,但從原則上講這與人類的決策能力是一致的。這讓我非常想知道我們作為人類是否真的很智能,或者說我們是否有非常高級的神經網路模型。我們做出的決策只是對生活中收集到的數據進行訓練。那麼一旦有了能夠在合理時間段內存儲和計算數據的先進模型和系統時,是否可以數字化大腦呢?所以當我們有了比大腦更好更快的模型(基於數百萬人的數據訓練出的)時,會發生什麼?

另一篇文章(https://deeplearning4j.org/lstm.html)的有趣觀點:人總是被自己的行為所困擾。

我們用一個例子來闡述上面的解釋,這個例子是預測一系列字母後的下一個字母。想像一個有 8 個字母的單詞 namaskar。

namaskar(合十禮):印度表示尊重的傳統問候或姿勢,將手掌合起置於面前或胸前鞠躬。

如果我們在向網路輸入 7 個字母後試著找出第 8 個字母,會發生什麼呢?隱藏層會經歷 8 次迭代。如果展開網路的話就是一個 8 層的網路,每一層對應一個字母。所以你可以想像一個普通的神經網路被重復了多次。展開的次數與它記得多久之前的數據是直接相關的。

循環神經網路的運作原理

循環神經元

這里我們將更深入地了解負責決策的實際神經元。以之前提到的 namaskar 為例,在給出前 7 個字母後,試著找出第 8 個字母。輸入數據的完整詞彙表是 {n,a,m,s,k,r}。在真實世界中單詞或句子都會更復雜。為了簡化問題,我們用的是下面這個簡單的詞彙表。

在上圖中,隱藏層或 RNN 塊在當前輸入和之前的狀態中應用了公式。在本例中,namaste 的字母 n 前面什麼都沒有。所以我們直接使用當前信息推斷,並移動到下一個字母 a。在推斷字母 a 的過程中,隱藏層應用了上述公式結合當前推斷 a 的信息與前面推斷 n 的信息。輸入在網路中傳遞的每一個狀態都是一個時間步或一步,所以時間步 t 的輸入是 a,時間步 t-1 的輸入就是 n。將公式同時應用於 n 和 a 後,就得到了一個新狀態。

用於當前狀態的公式如下所示:

h_t 是新狀態,h_t-1 是前一個狀態。x_t 是時間 t 時的輸入。在對之前的時間步應用了相同的公式後,我們已經能感知到之前的輸入了。我們將檢查 7 個這樣的輸入,它們在每一步的權重和函數都是相同的。

現在試著以簡單的方式定義 f()。我們使用 tanh 激活函數。通過矩陣 W_hh 定義權重,通過矩陣 W_xh 定義輸入。公式如下所示:

上例只將最後一步作為記憶,因此只與最後一步的數據合並。為了提升網路的記憶能力,並在記憶中保留較長的序列,我們必須在方程中添加更多的狀態,如 h_t-2、h_t-3 等。最後輸出可以按測試階段的計算方式進行計算:

其中,y_t 是輸出。對輸出與實際輸出進行對比,然後計算出誤差值。網路通過反向傳播誤差來更新權重,進行學習。本文後續部分會對反向傳播進行討論。

基於時間的反向傳播演算法(BPTT)

本節默認你已經了解了反向傳播概念。如果需要對反向傳播進行深入了解,請參閱鏈接:?http://cs231n.github.io/optimization-2/?。

現在我們了解了 RNN 是如何實際運作的,但是在實際工作中如何訓練 RNN 呢?該如何決定每個連接的權重呢?如何初始化這些隱藏單元的權重呢?循環網路的目的是要准確地對序列輸入進行分類。這要靠誤差值的反向傳播和梯度下降來實現。但是前饋網路中使用的標准反向傳播無法在此應用。

與有向無環的前饋網路不同,RNN 是循環圖,這也是問題所在。在前饋網路中可以計算出之前層的誤差導數。但 RNN 的層級排列與前饋網路並不相同。

答案就在之前討論過的內容中。我們需要展開網路。展開網路使其看起來像前饋網路就可以了。

展開 RNN

在每個時間步取出 RNN 的隱藏單元並復制。時間步中的每一次復制就像前饋網路中的一層。在時間步 t+1 中每個時間步 t 層與所有可能的層連接。因此我們對權重進行隨機初始化,展開網路,然後在隱藏層中通過反向傳播優化權重。通過向最低層傳遞參數完成初始化。這些參數作為反向傳播的一部分也得到了優化。

展開網路的結果是,現在每一層的權重都不同,因此最終會得到不同程度的優化。無法保證基於權重計算出的誤差是相等的。所以每一次運行結束時每一層的權重都不同。這是我們絕對不希望看到的。最簡單的解決辦法是以某種方式將所有層的誤差合並到一起。可以對誤差值取平均或者求和。通過這種方式,我們可以在所有時間步中使用一層來保持相同的權重。

RNN 實現

本文試著用 Keras 模型實現 RNN。我們試著根據給定的文本預測下一個序列。

代碼地址:?https://gist.github.com/.git?

該模型是 Yash Katariya 建的。我對該模型做了一些細微的改動以適合本文的要求。

⑵ python關於numpy基礎問題

Python發展至今,已經有越來越多的人使用python進行科學技術,NumPY是python中的一款高性能科學計算和數據分析的基礎包。
ndarray
ndarray(以下簡稱數組)是numpy的數組對象,需要注意的是,它是同構的,也就是說其中的所有元素必須是相同的類型。其中每個數組都有一個shape和dtype。
shape既是數組的形狀,比如
復制代碼
1 import numpy as np
2 from numpy.random import randn
3
4 arr = randn(12).reshape(3, 4)
5
6 arr
7
8 [[ 0.98655235 1.20830283 -0.72135183 0.40292924]
9 [-0.05059849 -0.02714873 -0.62775486 0.83222997]
10 [-0.84826071 -0.29484606 -0.76984902 0.09025059]]
11
12 arr.shape
13 (3, 4)
復制代碼
其中(3, 4)即代表arr是3行4列的數組,其中dtype為float64
一下函數可以用來創建數組
array將輸入數據轉換為ndarray,類型可制定也可默認
asarray將輸入轉換為ndarray
arange類似內置range
ones、ones_like根據形狀創建一個全1的數組、後者可以復制其他數組的形狀
zeros、zeros_like類似上面,全0
empty、empty_like創建新數組、只分配空間
eye、identity創建對角線為1的對角矩陣
數組的轉置和軸對稱
轉置是多維數組的基本運算之一。可以使用.T屬性或者transpose()來實現。.T就是進行軸對換而transpose則可以接收參數進行更豐富的變換
復制代碼
arr = np.arange(6).reshape((2,3))
print arr
[[0 1 2]
[3 4 5]]
print arr.T
[[0 3]
[1 4]
[2 5]]
arr = np.arange(24).reshape((2,3,4))
print arr
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
print arr.transpose((0,1,2))
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
復制代碼
數組的運算
大小相等的數組之間做任何算術運算都會將運算應用到元素級別。
復制代碼
1 arr = np.arange(9).reshape(3, 3)
2 print arr
3
4 [[0 1 2]
5 [3 4 5]
6 [6 7 8]]
7
8 print arr*arr
9
10 [[ 0 1 4]
11 [ 9 16 25]
12 [36 49 64]]
13
14 print arr+arr
15
16 [[ 0 2 4]
17 [ 6 8 10]
18 [12 14 16]]
19
20 print arr*4
21
22 [[ 0 4 8]
23 [12 16 20]
24 [24 28 32]]
復制代碼
numpy的簡單計算中,ufunc通用函數是對數組中的數據執行元素級運算的函數。
如:
復制代碼
arr = np.arange(6).reshape((2,3))
print arr
[[0 1 2]
[3 4 5]]
print np.square(arr)
[[ 0 1 4]
[ 9 16 25]]
復制代碼
類似的有:abs,fabs,sqrt,square,exp,log,sign,ceil,floor,rint,modf,isnan,isfinite,isinf,cos,cosh,sin,sinh,tan,tanh,
add,subtract,multiply,power,mod,equal,等等

⑶ 怎樣用python構建一個卷積神經網路

用keras框架較為方便

首先安裝anaconda,然後腔升瞎通過pip安裝keras

⑷ 非線性建模-神經網路

      納彎派  這學期選修了Python與演算法基礎,利用Python語言編寫力圖實現高效演算法。前期接觸了線性建模中的單變數及多元變數回歸模型、多項式回歸和灰度模型等。目前正在解決非線性建模問題,引入了神經網路的概念,這里作為自我梳理。

        首先該網路有三層:輸入層、隱含層和輸出層。輸入層進行變數與優化權重的加權計算,每個節點輸出z=Σxiwij,此時我們把多個變數鬧敗(x),變為了單個變數(z)。隱含層完成「非線性的實現」,節點值ho=1/((1+e^(-z))),此處使用了生長函數。當我們調節wij(優化權重),使模型收斂,就能解決該非線性問題。

        接著我們建立MLPClassifier神經網路模型。以下辨明多個參數。

hidden_layer_sizes :用元組,一個數字代表一個隱含層的節點。如hidden_layer_sizes=(50,50) 兩個隱含層,每層50個節點hidden_layer_sizes=(60,) 一個隱含層,60個節點,其中逗號不能省略

activation :激活函數, 對Σxiwij的函數轉換。

{'identity','logistic', 'tanh'洞賀, 'relu'}, 默認relu                                                

•identity:f(x)= x

•logistic:其實就是sigmod,f(x) = 1 / (1 + exp(-x)).

•tanh:f(x) = tanh(x).

•relu:f(x) = max(0, x)

solver : {'bfgs', 'sgd', 'adam'}, 默認adam,用來優化權重

lbfgs:quasi-Newton(擬牛頓法)方法的優化器

sgd:隨機梯度下降

adam: Kingma, Diederik, and Jimmy Ba提出的基於隨機梯度的優化器

注意:默認solver 'adam',在相對較大的數據集上效果比較好(幾千個樣本或者更多),對小數據集來說,lbfgs收斂更快效果也更好。

learning_rate  :學習率,用於權重更新,只有當solver為』sgd』時使用,{'constant','invscaling', 'adaptive'},默認constant

•constant: 由learning_rate_init給定的恆定學習率

•invscaling:隨著時間t使用power_t的逆標度指數不斷降低學習率learning_rate_ ,effective_learning_rate = learning_rate_init / pow(t, power_t)

•adaptive:只要訓練損耗在下降,就保持學習率為learning_rate_init不變,當連續兩次不能降低訓練損耗或驗證分數停止升高至少tol時,將當前學習率除以5。

⑸ 如何利用python使用libsvm

一:libsvm包下載與使用:

LIBSVM是台灣大學林智仁(Lin Chih-Jen)副教授等開發設計的一個簡單、易於使用和快速有效的SVM模式識別與回歸的軟體包,他不但提供了編譯好的可在Windows系列系統的老或執行文件,還提供了源代碼,方便改進.
把包解壓在C盤之中,如:C:\libsvm-3.18
2.
因為要用libsvm自帶的腳本grid.py和easy.py,需要去官網下載繪圖工具gnuplot,解壓到c盤
3.
進入c:\libsvm\tools目錄下,用文本編輯器(記事本,edit都可以)修改grid.py和easy.py兩個文件,找到其中關於gnuplot路徑的那項,根據實際路徑進行修改,並保存
4python與libsvm的連接(參考SVM學習筆記(2)LIBSVM在python下的使用 )

a.打早告開IDLE(python GUI),輸入
>>>import sys
>>>sys.version
如果你的python是32位,將出現如下字元:
『2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)]』
這個時候LIBSVM的python介面設置將非常簡單。在libsvm-3.16文件夾下的windows文件夾中找到動態鏈接庫libsvm.dll,將其添加到系統目錄,如`C:\WINDOWS\system32\』,即可在python中使用libsvm
b.如果你是64位的請參考文獻,請參考上述連接。

5.執行一個小例子

import os

os.chdir('C:\libsvm-3.18\python')#請根據實際路徑修改

from svmutil import *

y, x = svm_read_problem('../heart_scale')#讀取自帶數據

m = svm_train(y[:200], x[:200], '-c 4')

p_label, p_acc, p_val = svm_predict(y[200:], x[200:], m)

##出現如下結果,應該是正確安裝了
optimization finished, #iter = 257
nu = 0.351161
obj = -225.628984, rho = 0.636110
nSV = 91, nBSV = 49
Total nSV = 91
Accuracy = 84.2857% (59/70) (classification)

二幾個簡單的例子
從陸含明下載實驗數據集。並且將數據集拷貝到C:\libsvm-3.18\windows下(因為之後我們需要利用該文件夾下的其他文件,這樣比較方便,當然之後你用絕對地址也可以了)
建立一個py文件,寫下如下代碼:
例1:

import os

os.chdir('C:\libsvm-3.18\windows')#設定路徑
from svmutil import *

y, x = svm_read_problem('train.1.txt')#讀入訓練數據
yt, xt = svm_read_problem('test.1.txt')#訓練測試數據
m = svm_train(y, x )#訓練
svm_predict(yt,xt,m)#測試

執行上述代碼,精度為:Accuracy = 66.925% (2677/4000) (classification)

常用介面
svm_train() : train an SVM model#訓練
svm_predict() : predict testing data#預測
svm_read_problem() : read the data from a LIBSVM-format file.#讀取libsvm格式的數據
svm_load_model() : load a LIBSVM model.
svm_save_model() : save model to a file.
evaluations() : evaluate prediction results.
- Function: svm_train#三種訓練寫法
There are three ways to call svm_train()
>>> model = svm_train(y, x [, 'training_options'])
>>> model = svm_train(prob [, 'training_options'])
>>> model = svm_train(prob, param)

有關參數的設置(read me 文件夾中有詳細說明):
Usage: svm-train [options] training_set_file [model_file]
options:
-s svm_type : set type of SVM (default 0)#選擇哪一種svm
0 -- C-SVC (multi-class classification)
1 -- nu-SVC (multi-class classification)
2 -- one-class SVM
3 -- epsilon-SVR (regression)
4 -- nu-SVR (regression)
-t kernel_type : set type of kernel function (default 2)#是否用kernel trick
0 -- linear: u'*v
1 -- polynomial: (gamma*u'*v + coef0)^degree
2 -- radial basis function: exp(-gamma*|u-v|^2)
3 -- sigmoid: tanh(gamma*u'*v + coef0)
4 -- precomputed kernel (kernel values in training_set_file)
-d degree : set degree in kernel function (default 3)
-g gamma : set gamma in kernel function (default 1/num_features)
-r coef0 : set coef0 in kernel function (default 0)
-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)
-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)
-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
-m cachesize : set cache memory size in MB (default 100)
-e epsilon : set tolerance of termination criterion (default 0.001)
-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)
-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)
-v n: n-fold cross validation mode
-q : quiet mode (no outputs)

三提高預測的准確率:
通過一定的過程,可以提高預測的准確率(在文獻2中有詳細介紹):
a.轉換數據為libsvm可用形式.(可以通過下載的數據了解格式)
b.進行一個簡單的尺度變換
c.利用RBF kernel,利用cross-validation來查找最佳的參數 C 和 r
d.利用最佳參數C 和 r ,來訓練整個數據集
e.測試

再看例子1:
1.進入cmd模式下,輸入如下代碼,將現有數據進行適度變換,生成變換後的數據文件train.1.scale.txt

參數說明:
-l 變換後的下限
-u 變換後的上限
-s 參考上文

2執行以下代碼

import os

os.chdir('C:\libsvm-3.18\windows')#設定路徑
from svmutil import *

y, x = svm_read_problem('train.1.scale.txt')#讀入訓練數據
yt, xt = svm_read_problem('test.1.scale.txt')#訓練測試數據
m = svm_train(y, x )#訓練
svm_predict(yt,xt,m)#測試

精確度為Accuracy = 95.6% (3824/4000) (classification)。
可見我們只是做了簡單的尺度變換後,預測的正確率大大提升了。

3通過選擇最優參數,再次提高預測的准確率:(需要把tools文件下的grid.py拷貝到'C:\libsvm-3.18\windows'下)

import os
os.chdir('C:\libsvm-3.18\windows')#設定路徑
from svmutil import *
from grid import *

rate, param = find_parameters('train.1.scale.txt', '-log2c -3,3,1 -log2g -3,3,1')

y, x = svm_read_problem('train.1.scale.txt')#讀入訓練數據
yt, xt = svm_read_problem('test.1.scale.txt')#訓練測試數據
m = svm_train(y, x ,'-c 2 -g 4')#訓練
p_label,p_acc,p_vals=svm_predict(yt,xt,m)#測試

執行上面的程序,find_parmaters函數,可以找到對應訓練數據較好的參數。後面的log2c,log2g分別設置C和r的搜索范圍。搜索機制是以2為底指數搜索,如 –log2c –3 , 3,1 就是參數C,從2^-3,2^-2,2^-1…搜索到2^3.
搜索到較好參數後,在訓練的時候加上參數的設置。
另外,讀者可以自己試試數據集2,3.

⑹ Python--math庫

        Python math 庫提供許多對浮點數的數學運算函數,math模塊不支持復數運算,若需計算復數,可使用cmath模塊(本文不贅述)。

使用dir函數,查看math庫中包含的所有內容:

1) math.pi    # 圓周率π

2) math.e    #自然對數底數

3) math.inf    #正無窮大∞,-math.inf    #負無窮大-∞

4) math.nan    #非浮點數標記,NaN(not a number)

1) math.fabs(x)    #表示X值的絕對值

2) math.fmod(x,y)    #表示x/y的余數,結果為浮點數

3) math.fsum([x,y,z])    #對櫻歲如括弧內每個元素求和,其值為浮點數

4) math.ceil(x)    #向上取整,返回不小於x的最小整數

5)math.floor(x)    #向下取整,返回不大於x的最大整數

6) math.factorial(x)    #表示X的階乘,其中X值必須為整型,否則報錯

7) math.gcd(a,b)    #表示a,b的最大公約數

8)  math.frexp(x)      #x = i *2^j,返回(i,j)

9) math.ldexp(x,i)    #返回x*2^i的運算值,為math.frexp(x)函數的反運算

10) math.modf(x)    #表示x的小數和整數部分

11) math.trunc(x)    #表示x值的整數部分

12) math.sign(x,y)    #表示用數值y的正負號,替換x值的正負號

13) math.isclose(a,b,rel_tol =x,abs_tol = y)    #表示a,b的相似性,真值返回True,否則False;rel_tol是相對公差:雀慶表示a,b之間允許的最大差值,abs_tol是最小絕對公差,對比較接近於0有用,abs_tol必須至少為0。

14) math.isfinite(x)    #表示當x不為無窮大時,返回True,否則返回脊啟False

15) math.isinf(x)    #當x為±∞時,返回True,否則返回False

16) math.isnan(x)    #當x是NaN,返回True,否則返回False

1) math.pow(x,y)    #表示x的y次冪

2) math.exp(x)    #表示e的x次冪

3) math.expm1(x)    #表示e的x次冪減1

4) math.sqrt(x)    #表示x的平方根

5) math.log(x,base)    #表示x的對數值,僅輸入x值時,表示ln(x)函數

6) math.log1p(x)    #表示1+x的自然對數值

7) math.log2(x)    #表示以2為底的x對數值

8) math.log10(x)    #表示以10為底的x的對數值

1) math.degrees(x)    #表示弧度值轉角度值

2) math.radians(x)    #表示角度值轉弧度值

3) math.hypot(x,y)    #表示(x,y)坐標到原點(0,0)的距離

4) math.sin(x)    #表示x的正弦函數值

5) math.cos(x)    #表示x的餘弦函數值

6) math.tan(x)    #表示x的正切函數值

7)math.asin(x)    #表示x的反正弦函數值

8) math.acos(x)    #表示x的反餘弦函數值

9) math.atan(x)    #表示x的反正切函數值

10) math.atan2(y,x)    #表示y/x的反正切函數值

11) math.sinh(x)    #表示x的雙曲正弦函數值

12) math.cosh(x)    #表示x的雙曲餘弦函數值

13) math.tanh(x)    #表示x的雙曲正切函數值

14) math.asinh(x)    #表示x的反雙曲正弦函數值

15) math.acosh(x)    #表示x的反雙曲餘弦函數值

16) math.atanh(x)    #表示x的反雙曲正切函數值

1)math.erf(x)    #高斯誤差函數

2) math.erfc(x)    #余補高斯誤差函數

3) math.gamma(x)    #伽馬函數(歐拉第二積分函數)

4) math.lgamma(x)    #伽馬函數的自然對數

⑺ 如何用python和scikit learn實現神經網路

1:神經網路演算法簡介

2:Backpropagation演算法詳細介紹

3:非線性轉化方程舉例

4:自己實現神經網路演算法NeuralNetwork

5:基於NeuralNetwork的XOR實例

6:基於NeuralNetwork的手寫數字識別實例

7:scikit-learn中BernoulliRBM使用實例

8:scikit-learn中的手寫數字識別實例

一:神經網路演算法簡介

1:背景

以人腦神經網路為啟發,歷史上出現過很多版本,但最著名的是backpropagation

2:多層向前神經網路(Multilayer Feed-Forward Neural Network)

⑻ Python中Turtle模塊的基本指令都有哪些

>>> dir(turtle)['Canvas', 'Pen', 'RawPen', 'RawTurtle', 'Screen', 'ScrolledCanvas', 'Shape', 'TK', 'TNavigator', 'TPen', 'Tbuffer', 'Terminator', 'Turtle', 'TurtleGraphicsError', 'TurtleScreen', 'TurtleScreenBase', 'Vec2D', '_CFG', '_LANGUAGE', '_Root', '_Screen', '_TurtleImage', '__all__', '__builtins__', '__doc__', '__file__', '__forwardmethods', '__func_body', '__methodDict', '__methods', '__name__', '__package__', '__stringBody', '_alias_list', '_make_global_funcs', '_math_functions', '_screen_docrevise', '_tg_classes', '_tg_screen_functions', '_tg_turtle_functions', '_tg_utilities', '_turtle_docrevise', '_ver', 'acos', 'acosh', 'addshape', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'back', 'backward', 'begin_fill', 'begin_poly', 'bgcolor', 'bgpic', 'bk', 'bye', 'ceil', 'circle', 'clear', 'clearscreen', 'clearstamp', 'clearstamps', 'clone', 'color', 'colormode', 'config_dict', 'sign', 'cos', 'cosh', 'deep', 'degrees', 'delay', 'distance', 'done', 'dot', 'down', 'e', 'end_fill', 'end_poly', 'erf', 'erfc', 'exitonclick', 'exp', 'expm1', 'fabs', 'factorial', 'fd', 'fill', 'fillcolor', 'floor', 'fmod', 'forward', 'frexp', 'fsum', 'gamma', 'get_poly', 'getcanvas', 'getmethparlist', 'getpen', 'getscreen', 'getshapes', 'getturtle', 'goto', 'heading', 'hideturtle', 'home', 'ht', 'hypot', 'isdown', 'isfile', 'isinf', 'isnan', 'isvisible', 'join', 'ldexp', 'left', 'lgamma', 'listen', 'log', 'log10', 'log1p', 'lt', 'mainloop', 'math', 'mode', 'modf', 'onclick', 'ondrag', 'onkey', 'onrelease', 'onscreenclick', 'ontimer', 'os', 'pd', 'pen', 'pencolor', 'pendown', 'pensize', 'penup', 'pi', 'pos', 'position', 'pow', 'pu', 'radians', 'read_docstrings', 'readconfig', 'register_shape', 'reset', 'resetscreen', 'resizemode', 'right', 'rt', 'screensize', 'seth', 'setheading', 'setpos', 'setposition', 'settiltangle', 'setundobuffer', 'setup', 'setworldcoordinates', 'setx', 'sety', 'shape', 'shapesize', 'showturtle', 'sin', 'sinh', 'speed', 'split', 'sqrt', 'st', 'stamp', 'tan', 'tanh', 'tilt', 'tiltangle', 'time', 'title', 'towards', 'tracer', 'trunc', 'turtles', 'turtlesize', 'types', 'undo', 'undobufferentries', 'up', 'update', 'width', 'window_height', 'window_width', 'write', 'write_docstringdict', 'xcor', 'ycor']>>>

⑼ 怎樣用python構建一個卷積神經網路

用keras框架較為方便

首先安裝anaconda,然後通過pip安裝keras

⑽ 如何在Python中用LSTM網路進行時間序列預測

時間序列模型

時間序列預測分析就是利用過去一段時間內某事件時間的特徵來預測未來一段時間內該事件的特徵。這是一類相對比較復雜的預測建模問題,和回歸分析模型的預測不同,時間序列模型是依賴於事件發生的先後順序的,同樣大小的值改變順序後輸入模型產生的結果是不同的。
舉個栗子:根據過去兩年某股票的每天的股價數據推測之後一周的股價變化;根據過去2年某店鋪每周想消費人數預測下周來店消費的人數等等

RNN 和 LSTM 模型

時間序列模型最常用最強大的的工具就是遞歸神經網路(recurrent neural network, RNN)。相比與普通神經網路的各計算結果之間相互獨立的特點,RNN的每一次隱含層的計算結果都與當前輸入以及上一次的隱含層結果相關。通過這種方法,RNN的計算結果便具備了記憶之前幾次結果的特點。

典型的RNN網路結構如下:

4. 模型訓練和結果預測
將上述數據集按4:1的比例隨機拆分為訓練集和驗證集,這是為了防止過度擬合。訓練模型。然後將數據的X列作為參數導入模型便可得到預測值,與實際的Y值相比便可得到該模型的優劣。

實現代碼

  • 時間間隔序列格式化成所需的訓練集格式

  • import pandas as pdimport numpy as npdef create_interval_dataset(dataset, look_back):

  • """ :param dataset: input array of time intervals :param look_back: each training set feature length :return: convert an array of values into a dataset matrix. """

  • dataX, dataY = [], [] for i in range(len(dataset) - look_back):

  • dataX.append(dataset[i:i+look_back])

  • dataY.append(dataset[i+look_back]) return np.asarray(dataX), np.asarray(dataY)


  • df = pd.read_csv("path-to-your-time-interval-file")

  • dataset_init = np.asarray(df) # if only 1 columndataX, dataY = create_interval_dataset(dataset, lookback=3) # look back if the training set sequence length

  • 這里的輸入數據來源是csv文件,如果輸入數據是來自資料庫的話可以參考這里

  • LSTM網路結構搭建

  • import pandas as pdimport numpy as npimport randomfrom keras.models import Sequential, model_from_jsonfrom keras.layers import Dense, LSTM, Dropoutclass NeuralNetwork():

  • def __init__(self, **kwargs):

  • """ :param **kwargs: output_dim=4: output dimension of LSTM layer; activation_lstm='tanh': activation function for LSTM layers; activation_dense='relu': activation function for Dense layer; activation_last='sigmoid': activation function for last layer; drop_out=0.2: fraction of input units to drop; np_epoch=10, the number of epoches to train the model. epoch is one forward pass and one backward pass of all the training examples; batch_size=32: number of samples per gradient update. The higher the batch size, the more memory space you'll need; loss='mean_square_error': loss function; optimizer='rmsprop' """

  • self.output_dim = kwargs.get('output_dim', 8) self.activation_lstm = kwargs.get('activation_lstm', 'relu') self.activation_dense = kwargs.get('activation_dense', 'relu') self.activation_last = kwargs.get('activation_last', 'softmax') # softmax for multiple output

  • self.dense_layer = kwargs.get('dense_layer', 2) # at least 2 layers

  • self.lstm_layer = kwargs.get('lstm_layer', 2) self.drop_out = kwargs.get('drop_out', 0.2) self.nb_epoch = kwargs.get('nb_epoch', 10) self.batch_size = kwargs.get('batch_size', 100) self.loss = kwargs.get('loss', 'categorical_crossentropy') self.optimizer = kwargs.get('optimizer', 'rmsprop') def NN_model(self, trainX, trainY, testX, testY):

  • """ :param trainX: training data set :param trainY: expect value of training data :param testX: test data set :param testY: epect value of test data :return: model after training """

  • print "Training model is LSTM network!"

  • input_dim = trainX[1].shape[1]

  • output_dim = trainY.shape[1] # one-hot label

  • # print predefined parameters of current model:

  • model = Sequential() # applying a LSTM layer with x dim output and y dim input. Use dropout parameter to avoid overfitting

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=input_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out,

  • return_sequences=True)) for i in range(self.lstm_layer-2):

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out,

  • return_sequences=True)) # argument return_sequences should be false in last lstm layer to avoid input dimension incompatibility with dense layer

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out)) for i in range(self.dense_layer-1):

  • model.add(Dense(output_dim=self.output_dim,

  • activation=self.activation_last))

  • model.add(Dense(output_dim=output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_last)) # configure the learning process

  • model.compile(loss=self.loss, optimizer=self.optimizer, metrics=['accuracy']) # train the model with fixed number of epoches

  • model.fit(x=trainX, y=trainY, nb_epoch=self.nb_epoch, batch_size=self.batch_size, validation_data=(testX, testY)) # store model to json file

  • model_json = model.to_json() with open(model_path, "w") as json_file:

  • json_file.write(model_json) # store model weights to hdf5 file

  • if model_weight_path: if os.path.exists(model_weight_path):

  • os.remove(model_weight_path)

  • model.save_weights(model_weight_path) # eg: model_weight.h5

  • return model

  • 這里寫的只涉及LSTM網路的結構搭建,至於如何把數據處理規范化成網路所需的結構以及把模型預測結果與實際值比較統計的可視化,就需要根據實際情況做調整了。

    閱讀全文

    與pythontanh相關的資料

    熱點內容
    微信聊天界面源碼 瀏覽:22
    seo競價推廣點擊價格演算法公式 瀏覽:315
    框架結構可以加密嗎 瀏覽:218
    python編譯器怎麼清除 瀏覽:73
    linux全局socks代理 瀏覽:611
    php微信抽獎 瀏覽:771
    壓縮演算法嵌入式移植 瀏覽:531
    php新手小例子 瀏覽:233
    按照醫生的演算法一周是幾天 瀏覽:805
    三次b樣條曲線演算法 瀏覽:924
    java7特性 瀏覽:555
    愛山東app小學報名怎麼知道報沒報上 瀏覽:458
    android獲取wifi信號 瀏覽:133
    娜拉美妝app怎麼使用 瀏覽:760
    有了源碼要買伺服器嗎 瀏覽:365
    app怎麼查看自己的存款利息 瀏覽:515
    碧藍安卓與b站有什麼區別 瀏覽:342
    php靜態塊 瀏覽:719
    ftpmget命令 瀏覽:475
    源碼時代怎樣 瀏覽:415