【TensorFlow】01 TensorFlow簡介與Python基礎
2018.9.10
一、概述
- TF使用數據數據流圖進行數值計算,亮點是支持異構設備分布式計算機
- 常用的ML庫有MXNet Torch/Pytorch Theano CNTK Caffe等
- 0階張量(純量),1階張量(向量),2階張量(矩陣)tensor(張量) flow(流動)
- 編程模式 命令式編程(Torch) 符號式編程(Tensorflow,theano 描述算法流程 放到其他語言執行)
- TF使用數據流圖來進行編程 是一種推斷結構
- TF的高層庫()如Kearas(對用戶友好,模塊化)
- Deep-learning主要的運算是浮點運算
- TF的亮點之一是autograph模式
- TF的功能:設計、訓練、部署(唯一一個形成完整生態的ML sys)
二、環境配置
虛擬環境的安裝
- 使用pip命令安裝venv
sudo pip install virtualenv
- cd 項目目錄 切換到項目所在的目錄
- 激活虛擬環境
virtualenv --system-site-packages venv
- 退出venv
deactivate
5、查看venv環境的python包版本
pip freeze
三、科學工具和流程
- 編譯語言C,C++,Fortran 快,優化好,但語法不友好
- 腳本語言: Matlab 開發友好,收費,基礎語言缺乏
R語言 偏向統計,不能完成所有的任務 - 高級的pyhton shell:IPython,Jupyter
- python包:
Numpy:強大的數值對象操作
Scipy:高級的數據處理程序 (優化、回歸差值等)
Matplotlib:2D可視化 (不可交互,對3D圖像支持不好)
四、python基礎
(一)數據類型
python的變量類型不像C++一樣在定義時必須制定參數的變量類型,是一種動態語言
整數
Python可以處理任意大小(沒有大小限制)的正負整數,使用0x作為前綴表示十六進制
浮點數(小數)
按照科學計數法表示的數字,比如1.23e9代表$1.23*e^9$
由於儲存方式不同,整數永遠是精確的,但是浮點數可以四舍五入
字符串
字符串是以單引號或者雙引號括起來的任意文本
如果字符串裏有很多字符需要轉義,為簡化可以使用r‘‘,引號內的字符串默認不轉義
print(‘\\\t\\‘)
\ \
print(r‘\\\t\\‘)
\\\t\\
布爾值
boolean只有True和false兩種,其結果可由比較運算,邏輯運算得出(and,or,not)
- 當兩個變量比較時,如果給定的變量值小於100,則使用is運算的得到的兩個變量所得bool結果為true,否則為false(這是由於python在儲存同一個變量是當變量的數值小於100是使用同一塊內存,而大於100是則不使用同一塊內存)
a = 1000
b = 1000
print(a is b)
print(id(a),id(b))
False
4526894320 4526894960
a = 100
b = 100
print(a is b)
print(id(a),id(b))
True
4305331680 4305331680
(二)字符串
在python保存源代碼是,需要制定保存為UTF-8編碼,當解釋器讀取時,在開頭加上這兩行文字(第一行告訴Unix系統這是一個python可執行程序,win會忽略這個註釋,第二行是告訴編譯器以utf-8的方式讀取,否則中文不能正常編碼):
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
占位符
在Python中,格式化方式與C相同,使用%實現。%s表示用字符串替換,%d表示用整數替換,有幾個%?後面就需要跟幾個變量或值,當變量大於2時需要用括號括起來,有一個的話可以省略
print("Hi,my name is %s, I‘m %d years old."%(‘Alex‘,10))
Hi,my name is Alex, I‘m 10 years old.
占位符 | 替換內容 |
---|---|
%d | 整數 |
%f | 浮點數 |
%s | 字符串 |
%x | 十六進制數 |
(三)循環
for...in循環
for x in ...就是把每個元素帶入變量x,然後執行縮進塊的語句
names = [‘A‘,‘B‘,‘C‘]
for name in names:
print(name)
A
B
C
使用range(n)可以生成一個叠代器,其值是0 ~ n-1
sum = 0
for i in range(101):
sum = sum + i
print(sum)
5050
while循環
使用while循環打印100以內所有奇數的和:
sum = 0
n = 99
while n>0:
sum = sum + n
n = n - 2
print(sum)
2500
(四)Python數據結構
list(列表)
list是有序的集合,可以隨時刪除和添加元素
classlist = [‘class1‘,‘class2‘,‘class3‘]
len(classlist) #使用len可以獲得列表的長度
classlist[0] #使用下標可以訪問list的元素(以0開始)
classlist[-1] #使用負下標可以訪問倒數的元素
‘class3‘
列表的插入
classlist.append(‘class4‘) #尾插法
print(classlist)
classlist.insert(1,‘class5‘) #指定索引插入
print(classlist)
[‘class1‘, ‘class2‘, ‘class3‘, ‘class4‘]
[‘class1‘, ‘class5‘, ‘class2‘, ‘class3‘, ‘class4‘]
列表的刪除
classlist.pop() #如果pop不加參數,則刪除最後一個,否則按照索引順序刪除
print(classlist)
[‘class1‘, ‘class5‘, ‘class2‘, ‘class3‘]
註意:
- list中的元素數據類型可以不同
- list中可以有另外的list
- list中一個元素也沒有,則其長度為0
tuple(元組)
元組的另一名稱為有序列表,一旦初始化就不能修改,沒有append和pop方法
tuple存在的意義在於tuple不可變,所以代碼更安全,如果可能,盡量用tuple代替list
當定義只有一個元素的tuple時,需要將這個元素後面加上一個逗號,因為()可能會產生歧義。Python規定單獨出現的小括號內容計算結果使其本身。
t = (1,) #是(1,)而不是(1)
print(t)
(1,)
註意:
- 要創建一個內容也不變的tuple必須保證tuple中的每一個元素本身不能變(不允許出現tuple中嵌套list的情況)
dict(字典)
dict使用鍵-值(key-value)存儲,具有很快的查找速度
dic = {‘A‘:95,‘B‘:80,‘C‘:75}
print(dic[‘A‘])
95
修改dic某個key的值:
dic[‘A‘]=60
print(dic[‘A‘])
60
對比list與dict:
dict:查找插入速度快,不會因為key的增加而變慢,但浪費內存多
list:查找插入時間隨著元素的增加而增加,但占用空間小,浪費內存少
註意:
- dic是一種用空間換時間的存儲結構(hash)
- key必須是不可變的對象
set(集合)
set與dict類似,是key的集合,但不存儲value,沒有重復的key
重復的元素在set中被自動過濾掉:
s = set([1,1,2,2,3,3])
print(s)
{1, 2, 3}
其他方法:
add(key)可以添加元素到set中
remove(key)可以刪除set中的元素
集合操作:
s1 = set([1,2,3])
s2 = set([2,3,4])
print(s1&s2)
print(s1|s2)
{2, 3}
{1, 2, 3, 4}
(五)切片
L = [‘Michael‘, ‘Sarah‘, ‘Tracy‘, ‘Bob‘, ‘Jack‘]
取得前三個元素:
L = [‘Michael‘, ‘Sarah‘, ‘Tracy‘, ‘Bob‘, ‘Jack‘]
print(L[:3])
#L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個元素
#如果第一索引是0,可以省略
[‘Michael‘, ‘Sarah‘, ‘Tracy‘]
也可以負切片(記住倒數第一個元素的索引是 -1):
L[-2:]
[‘Bob‘, ‘Jack‘]
前10個數,每兩個取一個(第3個參數n為步長,代表隔n個數取出一個):
L = list(range(100))
>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
(五)jupyter使用
魔法命令
import numpy as np
np.reshape?? #在命令後加??可以查看對應命令的幫助文檔
File "<ipython-input-22-38dc740ee985>", line 2
np.reshape?? #在命令後加??可以查看對應命令的幫助文檔
^
SyntaxError: invalid syntax
a =[1,3,5]
%run my_file.py #百分號後面的為魔法命令,可以執行非python的內容
%whos #魔法命令:查看變量
%ls #支持大部分下的Linux命令
%pwd
%timeit a #使用timeit監測性能
for item in [1,3,5]:
print(item)
for item in range(10): #range()可以生成叠代器,等價於range(0,10)
print(item)
【TensorFlow】01 TensorFlow簡介與Python基礎