主頁 > 資料庫 > 基于tf2的dl編程學習(零)

基于tf2的dl編程學習(零)

2020-11-09 23:06:41 資料庫

一些進入tf2核心功能與性質之前的前置知識和有些生疏的點,主要為pandas的資料操作及可視化,和Tensorflow 提供的Dataset API,
在建立模型之前,首先需要對資料進行分析,以往的作業就是忽略了資料分析與資料處理的重要性,從而限制了模型性能的上限,后期再發現導致前期的很多作業白做了,在該階段主要使用到的工具就是pandas,

pandas

Pandas的主要資料結構是Series(一維資料)和DataFrame(二維資料),缺失資料表示為NaN

資料結構

Series

用于表示Pandas中的一維資料,常見于DataFrame中的一列,Series是帶標簽的一維陣列,因此同時帶有陣列與字典的特性,可通過pd.Series生成一個Series,data接受字典,多維陣列,標量等作為引數:

s = pd.Series(data, index=index)  # index自動生成數值索引,data為標量時index必須指定

Series操作與ndarray類似,由陣列性質支持大多數Numpy函式和索引,切片操作:

s[0]  # 索引
s[:3]  # 切片
s[s > 1]  # 條件索引
s[[1,2,4]]  # 批量索引
np.exp(s)  # numpy函式計算
s + s  # 矢量操作

Series還具有字典性質,類似于固定大小的字典,可進行相似操作:

s['a']  # 索引
s['b'] = 3  # 賦值
s.values  # 提取數值,形式為ndarray
DataFrame

DataFrame是pandas中最常用的資料型別,表現為二維表格,可視作Series的容器,DataFrame與Numpy陣列的最大差別在于每一列的資料型別各不相同,由ndarray,series或series字典,結構多維陣列等生成:

s = pd.DataFrame(data, index=index, columns=columns)  # index為行標簽,columns為列標簽

DataFrame類似于Series字典,以列屬性為鍵值,具有許多字典的性質:

df['one']  # 索引
df['three'] = df['one'] * df['two']  # 計算賦值
del df['two']  # 洗掉列
df.pop('two')  # 彈出列

可分別用index和columns屬性訪問行,列標簽,或loc和iloc屬性選擇行:

df[col]  # 選擇列
df.loc[label]  # 用標簽選擇行,一般默認是自增數值標簽
df.iloc[index]  # 用索引選擇行
df[a:b]  # 行切片
df[boolen]  # 布爾運算式選擇行

可通過查看DataFrame表格的一部分觀察資料格式等資訊:

df.head()  # 前五行資料
df.tail()  # 后五行資料
df.shape()  # 查看行列維度

DataFrame常用的一系列函式:

df.set_index()  # 設定某列為index,取代默認的index
df.dropna()  # 洗掉缺失值
df.fillna()  # 填充缺失值
df.isna()  # 獲取缺失值布爾掩碼
df.diff()  # 沿axis的差值,默認沿行
df.query()  # 接受布爾運算式,用于過濾dataframe,可直接用字串參考列名
df.mean()  # 統計均值,默認axis=0為列,axis=1則按行統計
df.apply()  # 資料處理,接受函式對所有dataframe資料進行計算,原資料物件不改變
df.values_count()  # 資料統計,多用于離散資料列
df.append()  # 追加行
df.groupby()  # 按條件分割資料,得到多組資料,可為每組單獨應用函式處理

可視化

主要方法是使用Series或DataFrame上的plot()函式,

# plot()函式主要引數
kind:
'line':折線圖
'bar':條形圖
'hist':直方圖
'box':箱形圖
'pie':餅圖
'area':面積圖
'scatter':散點圖

figsize:
元組,繪圖的大小

legend:
子圖圖例,對繪圖的說明

title:
繪圖示題

通過plot()函式定義如何繪圖后,還可以呼叫plt的各屬性進行進一步的定制:

plt.xlabel = ('x)  # 定義橫坐標名稱
plt.ylabel = ('y')  # 定義縱坐標名稱
plt.show()  # 顯示繪圖

檔案讀寫

# csv檔案,文本資料
pd.read_csv()
pd.to_csv()
# json檔案,文本資料
pd.read_json()
pd.to_json()
# excel檔案,二進制資料
pd.read_excel()
pd.to_excel()

pandas 常用操作

pd.get_dummies()  # pandas 實作one-hot encode 方法,對應列屬性組合為獨熱編碼形式
pd.concat()  # 按axis拼接,axis=0為按行拼接,axis=1為按列拼接,只會拼接不同行/列
pd.merge()  # 連接,默認內連接,還可選擇外連接,左連接,右連接;on引數指定連接鍵
pd.join()  # 合并,按照索引進行連接

tf2資料準備

Tensorflow官方推薦的Dataset API,同時支持從硬碟和記憶體讀取資料和相應的處理,

生成

# 從記憶體讀取資料,data可為陣列,矩陣,字典等
dataset = tf.data.Dataset.from_tensor_slices(data)
# 從生成器讀取資料
dataset = tf.data.Dataset.from_generator(generator)
# 讀取TFRecord檔案,dataset中每一元素是一個TFExample
filenames = ["/var/data/file1.tfrecord", "/var/data/file2.tfrecord"]
dataset = tf.data.TFRecordDataset(filenames)
# 讀取文本檔案,輸入檔案串列,Dateset中每一元素對應檔案中的一行,可讀取csv檔案
filenames = ["/var/data/file1.txt", "/var/data/file2.txt"]
dataset = tf.data.TextLineDataset(filenames)
# list_files將路徑Dataset化,可利用路徑在map函式中讀取檔案
dataset = tf.data.Dataset.list_files(./data/cifar2/train/*/*.jpg).map(load_image)

常用操作

# map函式,將Dataset中每個元素視為輸入,函式回傳值作為新的Dateset
dataset = dataset.map(lamda x: x+1)
# batch函式,根據接收的整數值將多個元素組合成batch
dataset = dataset.batch(32)
# shuffle函式,打亂Dataset中資料,引數buffersize表示打亂時的范圍
dataset = dataset.shuffle(buffer_size=1000)
# repeat函式,重復序列多次
dataset = dataset.repeat(5)
# take函式,采樣整數個樣本
dataset.take(5)
# flat_map函式,將dataset中資料映射并壓為一維,順序不變
dataset = dataset.flat_map(map_func)
# filter函式,對Dataset中每一個元素執行過濾方法
dataset = dataset.filter(filter_func)
# zip函式,打包,通常用于打包樣本和對應標簽
dataset = tf.data.Dataset.zip((image_ds,label_ds))
# window函式,每若干元素打包成滑動視窗
dataset = dataset.window(5)

圖片資料

使用Tensorflow原生方法準備圖片資料:

dataset = tf.data.Dataset.list_files("./data/cifar2/train/*/*.jpg") \
.map(load_image, num_parallel_calls=tf.data.experimental.AUTOTUNE) \
.shuffle(buffer_size = 1000).batch(BATCH_SIZE) \
.prefetch(tf.data.experimental.AUTOTUNE)
# list_files()找到所有圖片檔案的路徑,*表示任意字串
# map()函式對其進行處理,并指定num_parallel_calls選項進行并行化預處理
# shuffle()函式每次選擇buffer_size個資料進行打亂,避免記憶體不夠
# batch()函式對資料分組
# prefetch()函式預存資料,提升性能

map函式接受的處理函式,可為lambda匿名函式,lambda函式形式為:

lambda a,b:expression(a,b)  # 冒號前的a,b為引數,冒號后為函式的計算運算式

lambda函式回傳一個函式地址,是普通函式的單行簡寫形式

文本資料

文本資料的處理要更加復雜,包括去除停用詞,構建詞典,編碼轉換,序列填充,構建資料管道等等,這里使用到tf.data.Dataset搭配tf.keras.layers.experimental.preprocessing.TextVectorization預處理層

# 加載文本檔案并進行文本清洗,打亂,分批,得到dataset物件
dataset= tf.data.TextLineDataset(filenames = [train_data_path]) \
.map(split_line,num_parallel_calls = tf.data.experimental.AUTOTUNE) \
.shuffle(buffer_size = 1000).batch(BATCH_SIZE) \
.prefetch(tf.data.experimental.AUTOTUNE)

# 預處理層,用于構建詞典,編碼轉換和序列填充
vectorize_layer = TextVectorization(
    standardize=clean_text,  # 自定義文本清洗方法
    split = 'whitespace',
    max_tokens=MAX_WORDS-1, #有一個留給占位符
    output_mode='int',
    output_sequence_length=MAX_LEN)

# 得到純文本,并傳入預處理層中
ds_text = dataset.map(lambda text,label: text)
vectorize_layer.adapt(ds_text)

# 得到整齊的文本向量表示
ds = ds_train_raw.map(lambda text,label:(vectorize_layer(text),label)) \
    .prefetch(tf.data.experimental.AUTOTUNE)

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/208492.html

標籤:其他

上一篇:安全洗掉Elasticsearch資料節點

下一篇:Django中模板系統, T層的概念。

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more