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是行