刷代碼:LeetCode,github,kaggle, learning python hard way, 書,微信
python基礎(chǔ)(hard way→python算法書(算法導(dǎo)論-難,看不懂再看算法第四版-易)→leetcode)→numpy, pandas(官方10 minutes to pandas), matplotlib等庫,有書→機(jī)器學(xué)習(xí)基礎(chǔ)算法(GitHub手寫機(jī)器學(xué)習(xí)算法,siraj線性回歸的視頻),原理和代碼→項(xiàng)目,paper
github:tensorflow example
課前環(huán)境準(zhǔn)備:見論壇收藏的帖子(還需要將cudnn解壓出的cuda/bin路徑(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\cudnn-8.0-windows10-x64-v5.1\cuda\bin)加入系統(tǒng)path)
tflearn課程中(env-tflearn),安裝TensorFlow報(bào)錯(cuò):ImportError: No module named 'setuptools.wheel'
解決:conda install -c https://conda.anaconda.org/anaconda setuptools,然后再裝TensorFlow
numpy基礎(chǔ)
叉乘:符號(hào)為*,元素級(jí)乘法,每個(gè)對(duì)應(yīng)位置的元素相乘
矩陣點(diǎn)積:符號(hào)為.,np.matmul(a, b)),np.dot(a, b)或a.dot(b)(如果a, b是二維的,返回一個(gè)值不改變a)
矩陣轉(zhuǎn)置:
b = a.T,修改b中的數(shù)據(jù),則原始舉證a中對(duì)應(yīng)轉(zhuǎn)置的位置的數(shù)據(jù)也會(huì)改變,因?yàn)樗鼈児蚕硐嗤臄?shù)據(jù)副本,將轉(zhuǎn)置視為矩陣的不同視圖,而不是完全不同的矩陣。(這個(gè)原理也適用于b = a.reshape())
神經(jīng)網(wǎng)絡(luò)
簡(jiǎn)易神經(jīng)網(wǎng)絡(luò)

感知器perceptron
權(quán)重weight
激活函數(shù),最簡(jiǎn)單的激活函數(shù)(單位階躍函數(shù))

偏置項(xiàng)bias
感知器公式


常用的激活函數(shù):?jiǎn)挝浑A躍函數(shù),sigmoid,tanh,softmax
梯度下降
梯度是變化率或者斜率的另一個(gè)稱呼,是對(duì)多變量函數(shù)導(dǎo)數(shù)的泛化
梯度下降數(shù)學(xué)推導(dǎo)








反向傳播例子


實(shí)現(xiàn)反向傳播

修正線性單元(ReLU),隱藏層
f(x) = max(x, 0)
softmax

輸出經(jīng)過壓縮,輸出和為1
softmax可用于任何數(shù)量的分類,是神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)多分類問題的最佳輸出激活函數(shù)
交叉熵cross entropy

tensorflow:
with tf.Session() as sess:
tf.constant()
# 得到輸入
x = tf.placeholder(tf.string)
with tf.Session() as sess:
output = sess.run(x, feed_dict={x: 'hello, world'})
tf.Variable() # 可變tensor
tf.global_variables_initializer() # 初始化所有可變tensor
# 數(shù)學(xué)運(yùn)算,數(shù)據(jù)必須是同一類型
tf.add(a, b)
tf.subtract(a, b)
tf.multiply(a, b)
tf.divide(a, b)
tf.cast(tf.constant(2.0), tf.int32) # 強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型為int32
tf.truncated_normal((n, m)) # 從正態(tài)分布中生成隨機(jī)數(shù)
tf.zeros()
tf.matmul(a, b) # 矩陣相乘
tf.nn.softmax() # 計(jì)算softmax
tf.nn.relu()
# One-Hot Encoding
import numpy as np
from sklearn import preprocessing
labels = np.array(['a', 'f', 'd'])
# create the encoder
lb = preprocessing.LabelBinarizer()
lb.fit(labels)
lb.transform(labels)
tf.reduce_sum() # 返回序列的和
tf.log() # 返回輸入值的自然對(duì)數(shù)
tf.nn.dropout(layer, keep_prob) # 訓(xùn)練時(shí)keep_prob設(shè)為0.5,驗(yàn)證和測(cè)試時(shí)設(shè)為1
conv_layer = tf.nn.conv2d(input, weight, strides=[1, 2, 2, 1], padding='SAME')
conv_layer = tf.nn.bias_add(conv_layer, bias) # 對(duì)矩陣的最后一維加了偏置項(xiàng)
#weights 作為濾波器,[1, 2, 2, 1] 作為 strides。TensorFlow 對(duì)每一個(gè) input 維度使用一個(gè)單獨(dú)的 stride 參數(shù),[batch, input_height, input_width, input_channels]。我們通常把 batch 和 input_channels (strides 序列中的第一個(gè)第四個(gè))的 stride 設(shè)為 1。
conv_layer = tf.nn.max_pool(conv_layer, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
# tf.nn.max_pool() 函數(shù)實(shí)現(xiàn)最大池化時(shí), `ksize`參數(shù)是濾波器大小`strides`參數(shù)是步長(zhǎng)。2x2 的濾波器配合 2x2 的步長(zhǎng)是常用設(shè)定。
#`ksize` 和 `strides` 參數(shù)也被構(gòu)建為四個(gè)元素的列表,每個(gè)元素對(duì)應(yīng) input tensor 的一個(gè)維度 (`[batch, height, width, channels]`),對(duì) `ksize` 和 `strides` 來說,batch 和 channel 通常都設(shè)置成 `1`。
learning_rate 不宜太高,如果準(zhǔn)確率太低,首先嘗試調(diào)低學(xué)習(xí)率
超參數(shù),ADAGRAD
batch_size一般取32,64,128,256等


