python基礎B

import  sys

print(sys.path)

python可引用模塊路徑

 

 

 

os.getcwd()  當前工作目錄

 

 

 

\s是指空白,包括空格、換行、tab縮進等所有的空白,而\S剛好相反

[\s\S]*   是完全通配的意思,就表示所有的字符,完全的,一字不漏的。

 

 

 

 

pandas讀取csv文件提示不存在是什麼原因?

一般情況是數據文件沒有在當前路徑,那麼它是無法讀取數據的。另外,如果路徑名包含中文它也是無法讀取的。

 

(1)可以選擇:

 

import os

 

os.getcwd()

 

獲得當前的工作路徑,把你的數據文件放在此路徑上就可以了,就可以直接使用pd.read_csv("./_.csv")

 

(2) 可以選擇:

 

使用os.chdir(path),path是你的那個數據文件路徑

 

(3)可以選擇:

 

不更改路徑,直接調用df=pd.read_csv(U"文件存儲的盤(如C盤) :/文件夾/文件名。csv"),比如在C盤的Python文件夾的stock data 下:da = pd.read_csv(U"C:/Python2.7/stock data/託臉600.csv")

 

如果是在ubuntu 系統下可以:data = pd.read_csv(U"/home/閃電lai/Tinic/train")

 

 

 

打亂順序

 

 

 

只有在數據很龐大的時候(在機器學習中,幾乎任何時候都是),我們才需要使用 epochs,batch size,迭代這些術語,

 

在這種情況下,一次性將數據輸入計算機是不可能的。因此,爲了解決這個問題,我們需要把數據分成小塊,一塊一塊的傳遞給計算機,在每一步的末端更新神經網絡的權重,擬合給定的數據。

 

EPOCHS

 

當一個完整的數據集通過了神經網絡一次並且返回了一次,這個過程稱爲一個 epoch。

然而,當一個 epoch 對於計算機而言太龐大的時候,就需要把它分成多個小塊。

爲什麼要使用多於一個 epoch?我知道這剛開始聽起來會很奇怪,在神經網絡中傳遞完整的數據集一次是不夠的,而且我們需要將完整的數據集在同樣的神經網絡中傳遞多次。

但是請記住,我們使用的是有限的數據集,並且我們使用一個迭代過程即梯度下降,優化學習過程和圖示。因此僅僅更新權重一次或者說使用一個 epoch 是不夠的。

隨着 epoch 數量增加,神經網絡中的權重的更新次數也增加,曲線從欠擬合變得過擬合。

 

那麼,幾個 epoch 纔是合適的呢?不幸的是,這個問題並沒有正確的答案。對於不同的數據集,答案是不一樣的。但是數據的多樣性會影響合適的 epoch 的數量。比如,只有黑色的貓的數據集,以及有各種顏色的貓的數據集。

 

BATCH SIZE

一個 batch 中的樣本總數。記住:batch size 和 number of batches 是不同的。

BATCH 是什麼?在不能將數據一次性通過神經網絡的時候,就需要將數據集分成幾個 batch。

正如將這篇文章分成幾個部分,如介紹、梯度下降、Epoch、Batch size 和迭代,從而使文章更容易閱讀和理解。

迭代

理解迭代,只需要知道乘法表或者一個計算器就可以了。迭代是 batch 需要完成一個 epoch 的次數。記住:在一個 epoch 中,batch 數和迭代數是相等的。

比如對於一個有 2000 個訓練樣本的數據集。將 2000 個樣本分成大小爲 500 的 batch,那麼完成一個 epoch 需要 4 個 iteration。

 

 

 

 

 

PIL中的Image和numpy中的數組array相互轉換

 

1. PIL image轉換成array

 

     img = np.asarray(image)

需要注意的是,如果出現read-only錯誤,並不是轉換的錯誤,一般是你讀取的圖片的時候,默認選擇的是"r","rb"模式有關。

 

修正的辦法: 手動修改圖片的讀取狀態

 

  img.flags.writeable = True  # 將數組改爲讀寫模式

 

2. array轉換成image

 

Image.fromarray(np.uint8(img))

 

 

 

 

 

 

 

 

repeat是屬於ndarray對象的方法,使用它可以通過兩個管道:

(1)numpy.repeat(a,repeats,axis=None);

(2)object(ndarray).repeat(repeats,axis=None):理解了第一種方法就可以輕鬆知道第二種方法了。

參數的意義:axis=None,時候就會flatten當前矩陣,實際上就是變成了一個行向量

axis=0,沿着y軸複製,實際上增加了行數

axis=1,沿着x軸複製,實際上增加列數

repeats可以爲一個數,也可以爲一個矩陣,具體區別我們從以下實例中就會發現以下各個實例都是使用了矩陣c:

 

 

 

 

 

 

 

卷積層輸出大小計算

 

 

假設

輸入數據維度爲W*W

Filter大小 F×F

步長 S

padding的像素數 P

可以得出

 

N = (W − F + 2P )/S+1

 

輸出大小爲 N×N

##################################################################################################################################

卷積後圖片輸出大小几個數

 

W:圖像寬,H:圖像高,D:圖像深度(通道數)

 

F:卷積核寬高,N:卷積核(過濾器)個數

 

S:步長,P:用零填充個數

 

卷積後輸出圖像大小:

 

                                    Width=(W-F+2P)/S+1

 

                                    Height=(H-F+2P)/S+1

 

卷積後輸出圖像深度:

 

                                    N=D

 

輸出圖像大小:             (width,height,N)

 

weight個數:       

 

                                    F*F*D*N

 

bias個數:

 

                                    N

 

總結:卷積輸出大小=[(輸入大小-卷積核(過濾器)大小+2*P)/步長]+1

 

通用的卷積時padding 的選擇

 

如卷積核寬高爲3時 padding 選擇1

如卷積核寬高爲5時 padding 選擇2

如卷積核寬高爲7時 padding 選擇3

 

 

池化後圖片輸出大小及個數

 

W:圖像寬,H:圖像高,D:圖像深度(通道數)

 

F:卷積核寬高,S:步長

 

池化後輸出圖像大小:

 

                                   W=(W-F)/S+1

 

                                   H=(H-F)/S+1

 

池化後輸出圖像深度:    

 

                                   N=D

 

總結:池化輸出大小=[(輸入大小-卷積核(過濾器)大小)/步長]+1

 

 

 

 

 

一維卷積

 

 

 

損失(目標函數)函數(mse  hinge )和優化器(sgd  RMSprop  Adam)  編譯必需

metrics 性能評估  不必須

 

 

矩陣變圖片

——————————————————————————————————

 

 

 

 

 

a=np.zeros((2,3))   #中間兩個小括號

np.ones((1,2))/np.full((2,2),8)/np.eye(3)

np.empty((2,3,4))/

 

 

 

 

type(a)

a.shape

a.dtype

 

 

 

 

b=a[0:2,2:4].copy()

b[0,0]=124

 

 

 

 

 

np.add(x,y)

np.subtract(x,y)

np.multiply(x,y)

np.divide(x,y)   #逐元素相除

np.sqrt(x)v.dot(w)/np.dot(v,w)  #求向量內積

(np.matmul)x.T   #轉置

 

 

 





axis=0是列,1是行