【TensorFlow】01 TensorFlow簡介與Python基礎
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代表.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?=?1000b?=?1000print(a?is?b) print(id(a),id(b))
False4526894320?4526894960
a?=?100b?=?100print(a?is?b) print(id(a),id(b))
True4305331680?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.
(三)循環
for x in ...就是把每個元素帶入變量x,然后執行縮進塊的語句
names?=?['A','B','C']for?name?in?names: ????print(name)
AB C
使用range(n)可以生成一個迭代器,其值是0 ~ n-1
sum?=?0for?i?in?range(101): ????sum?=?sum?+?i print(sum)
5050
使用while循環打印100以內所有奇數的和:
sum?=?0n?=?99while?n>0: ????sum?=?sum?+?n ????n?=?n?-?2print(sum)
2500
(四)Python數據結構
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
元組的另一名稱為有序列表,一旦初始化就不能修改,沒有append和pop方法
tuple存在的意義在于tuple不可變,所以代碼更安全,如果可能,盡量用tuple代替list
當定義只有一個元素的tuple時,需要將這個元素后面加上一個逗號,因為()可能會產生歧義。Python規定單獨出現的小括號內容計算結果使其本身。
t?=?(1,)??#是(1,)而不是(1)print(t)
(1,)
注意:
要創建一個內容也不變的tuple必須保證tuple中的每一個元素本身不能變(不允許出現tuple中嵌套list的情況)
dict使用鍵-值(key-value)存儲,具有很快的查找速度
dic?=?{'A':95,'B':80,'C':75} print(dic['A'])
95
修改dic某個key的值:
dic['A']=60print(dic['A'])
60
對比list與dict:
dict:查找插入速度快,不會因為key的增加而變慢,但浪費內存多
list:查找插入時間隨著元素的增加而增加,但占用空間小,浪費內存少
注意:
dic是一種用空間換時間的存儲結構(hash)
key必須是不可變的對象
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?"
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)
-------------------------------------------
本文轉自XuAn97916博客51CTO博客
TensorFlow 深度學習 python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。