TensorFlow(Python)入門

簡介

分爲CPU運行和GPU運行
GPU安裝起來比較麻煩 這裏先以CPU爲主

安裝

pip install tensorflow==1.15.0

入門

tensorflow playground(遊樂場) TensorFlow可視化學習神經網絡
www.playground.tensorflow.org
DATA數據集   FEATURES特徵   HIDDEN LAYERS隱含層   OUTPUT輸出
類似於人的1000億腦細胞 神經元 分層 分位置分佈在大腦中
第一層 neurons神經元4個 (可以加減調節個數) 神經元就是數學上的方程
輸入----->運算---->輸出
在這裏插入圖片描述
這裏的數據集是一個非線性的 第一層神經元 切了四刀 切完之後需要進行轉換通過激活函數,就是最上面的Activation(這裏可以進行選擇) 先用Tanh 它是雙曲正切函數 通過它將直線變彎來進行分類。
最上面: Epoch訓練次數   Learning rate學習率    Activate激活 Regularization正則化 (分爲L1和L2,領回歸是L2 羅斯迴歸L1 彈性網絡都有)   Regularzaion rate正則化率    Problem type問題類型(分類和迴歸)

Activation

Sigmoid s型曲線 邏輯斯蒂是來自線性模塊 求解出來的是線性方程 代入到Sigmoid中就變成曲線 就變成了概率 就可以解決分類問題 現實中有很多都不是線性問題
tanh 也是彎的 雙曲正切
ReLU 線性整流函數 又稱修正線性單元

運行

點擊左上角的運行按鈕
可以將x1和x2 理解爲x座標和y座標 提供的是二維數據
神經網絡每一層和下一層之間通過’線’連接起來,這些線就是方程的斜率,
有的線細有的線粗 線越粗就說明權重越大 越重要
最後的結果就是 最後的兩個神經元的組合
在這裏插入圖片描述
神經元數量可以調節,使得結果更好 OUTPUT下面 是損失 損失越小越好
從神經元圖中可以看出數據就像從左面流到右面 所以謂之曰 Tensor(張量—>向量—>數據)Flow流
也可以調節 FEATURES 叫做特徵衍生

優化神經網絡

方式一:神經元多一些–>網絡強大–>係數,關係複雜
方式二:特徵衍生
方式三:調整激活函數
方式四:正則化
 

如果想使用GPU的話

1.pip install tensorflow-gpu
2.下載 CUDA 下載CUDNN
3.重啓電腦 (注意 TensorFlow-gpu版本與CUDA以及CUDNN版本要保持一致 CUDA-win10-9.0 CUDNN-7.0.4-FourCuda9.0)
 

代碼實現神經網絡構成過程

在這裏插入圖片描述
這裏是線性問題進行分類 而且右圖線穿過座標原點 只需要考慮斜率 左面四個斜率合成右面兩個斜率 再組合合成一個斜率 這裏可以用 \sum表示合成 橙色表示正藍色表示負

啓動python jupyter notebook

#導包
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# 數據兩個特徵:橫座標x,縱座標y
# 第一層的第一個神經元
# x ---> -0.77
# y ---> -0.22
-0.77*x - 0.22*y = 0
# 第一層的第二個神經元
#  x ---> -0.38
#  y ---> -0.79
-0.38*x - 0.79*y = 0
# 第二層神經元方程
# f1:第一層的第一個神經元  ---> 0.85
# f2:第一層的第二個神經元  ---> 0.77
0.85*(-0.77*x - 0.22*y) + 0.77*(-0.38*x - 0.79*y) = 0
(-0.77*0.85 - 0.77*0.38)*x - (0.85*0.22 + 0.77*0.79)*y = 0
y = (-0.77*0.85 - 0.77*0.38)/(0.85*0.22 + 0.77*0.79)*x
y = -1.19*x

f = lambda x : -1.19*x
plt.figure(figsize=(8,8))
x = np.linspace(-5,5,100)
y = f(x)
plt.plot(x,y)
plt.axis([-6,6,-6,6])
#畫出來的線一樣

TensorFlow使用

import warnings
warnings.filterwarnings('ignore')
import numpy as np
import tensorflow as tf

# 現在很多代碼用的都是1.x
# 最新版本2.x
# 1.x和2.x使用區別很大的
# 2.x慢慢取代1.x
tf.__version__

#常量的計算
nd1 = np.random.randint(0,10,size = 5)
nd1
# Tensor:張量-------->向量--------->數據(ndarray)
# Flow 流動
# TensorFlow:數據流圖(數據流動方式進行計算)
# 見名知意
s = tf.reduce_sum(nd1,name = 'sum') #求和
sess=tf.Session() 
sess #<tensorflow.python.client.session.Session at 0x211340d8b00>
sess.run(s) #拿s裏面的數值
m = tf.reduce_mean(nd1.astype(np.float16)) #求平均
with tf.Session() as sess: 
    print(sess.run(m))

c = tf.constant('Hello Tensorflow') #定義常量
c2 = tf.constant(1024)
c3 = tf.constant(512)
a = tf.add(c2,c3)
b = c3 - c2
d = tf.abs(b)
m = tf.multiply(10,8) #乘法
di = tf.divide(1024.0,100.0) #除
di2 = b/d
with tf.Session() as sess:
    print(sess.run(c).decode('utf-8')) #不解碼 帶b''
    print(sess.run(c2))
    print(sess.run(a))
    print(sess.run(b))
    print(sess.run(d))
    print(sess.run(m))
    print(di) #代碼格式不統一 不同人寫的
    print(sess.run(di2))

#矩陣操作
a = np.random.randint(0,10,size = (2,3))
b = np.random.randint(0,10,size = (3,4))
a.dot(b)
c = tf.matmul(a,b) #矩陣乘法
with tf.Session() as sess:
    print(sess.run(c))

#變量運算
# 求解方程時,係數和截距都是變量
v = tf.Variable(initial_value=0,dtype=np.float16,name = 'V1') #變量 初始值
v2 = tf.Variable(initial_value=3.14,dtype=tf.float16,name = 'V2') #起名字 報錯時會指定
with tf.Session() as sess: 
#     變量,初始化
    sess.run(tf.global_variables_initializer())
    result = sess.run([v,v2])
    print(result)   
#     將變量更新一下
    assign = tf.assign(v,2.718) #賦值操作
    sess.run(assign)  #需要運行一下 2.718纔會賦給v
    sess.run(tf.assign_sub(v2,2)) #減法   
    print(sess.run([v,v2]))
with tf.Session() as sess:
   print(sess.run(tf.random_normal(shape = [10])))

# 佔位符,placeholder
A = tf.placeholder(dtype=tf.float32,shape = (3,4),name = 'A')
B = tf.placeholder(dtype=np.float32,shape = (4,5),name = 'B')
C = tf.matmul(A,B) #(3,5) 沒有數只有形狀
with tf.Session() as sess:    
    b = sess.run(tf.random_normal(shape = [4,5]))    
    ret = sess.run(C,feed_dict={A:np.random.randint(0,5,size = (3,4)),B:b})    
    print(ret)
# 佔位符,placeholder
A = tf.placeholder(dtype=tf.float32,shape = (None,4),name = 'A')
B = tf.placeholder(dtype=np.float32,shape = (4,None),name = 'B')
C = tf.matmul(A,B)
with tf.Session() as sess:  
    b = sess.run(tf.random_normal(shape = [4,2]))    
    ret = sess.run(C,feed_dict={A:np.random.randint(0,5,size = (10,4)),B:b})    
    print(ret) #(10,2)
# 佔位符,placeholder
A = tf.placeholder(dtype=tf.float32,shape = None,name = 'A')
B = tf.placeholder(dtype=np.float32,shape = None,name = 'B')
C = tf.matmul(A,B)
with tf.Session() as sess:    
    b = sess.run(tf.random_normal(shape = [4,2]))    
    ret = sess.run(C,feed_dict={A:np.random.randint(0,5,size = (10,4)),B:b})    
    print(ret) #(10,2)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章