Tensorflow-datasets-數(shù)據(jù)集

tf.data包含了對數(shù)據(jù)進行讀取温艇、操作秕铛、輸入模型的各種方法桃序。


理解流程

鳶尾花案例中的train_input_fn喂食函數(shù)中,使用了tf.data對數(shù)據(jù)進行處理:

#針對訓練的喂食函數(shù)
def train_input_fn(features, labels, batch_size):
    dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
    dataset = dataset.shuffle(1000).repeat().batch(batch_size) #每次隨機調整數(shù)據(jù)順序
    return dataset

這個train_input_fn輸入函數(shù)后面被train使用:

#開始訓練模型条辟!
batch_size=100
classifier.train(input_fn=lambda:train_input_fn(train_x, train_y,batch_size),
                 steps=1000)

由此可見,train_input_fn可以把特征數(shù)據(jù)features(train_x)和標簽數(shù)據(jù)labels(train_y)聯(lián)合成一個dataset宏胯,以供分類器的訓練函數(shù)train使用羽嫡。

我們print(train_x):

     SepalLength  SepalWidth  PetalLength  PetalWidth
0            6.4         2.8          5.6         2.2
1            5.0         2.3          3.3         1.0
2            4.9         2.5          4.5         1.7
...

print(train_y),左側是序號肩袍,右側是花的類型0杭棵、1、2

0      2
1      1
2      2
...

下面分別介紹train_input_fn的三個參數(shù)


特征數(shù)據(jù)Features

  • features:包含單個列表字段的字典dict氛赐,格式如{'feature_name':[]}魂爪;或者pandas.DataFrame對象。

pandas.DataFrame(data,index,columns,dtype,copy)語法
data:dict,numpy ndarray或DataFrame
index,columns:Index或類似數(shù)組
dtype:數(shù)值類型艰管,默認None會進行自動推斷
copy:布爾值滓侍,是否從輸入拷貝

#測試DataFrame
import pandas as pd
import numpy as np
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d, dtype=np.int8)
d2=np.random.randint(low=0, high=10, size=(5, 5))
df2 = pd.DataFrame(d2,columns=['a', 'b', 'c', 'd', 'e'])

print(df,'\n',d2,'\n',df2)

輸出可以看到DataFrame的基本樣式:

#df
     col1  col2
0     1     3
1     2     4 

#d2
 [[2 4 6 4 2]
 [9 4 5 0 3]
 [1 5 1 4 5]
 [9 3 8 0 1]
 [1 3 0 5 0]] 

#df2
   a  b  c  d  e
0  2  4  6  4  2
1  9  4  5  0  3
2  1  5  1  4  5
3  9  3  8  0  1
4  1  3  0  5  0

實際上鳶尾花案例中的train_x就是pandas.read_csv生成的DataFrame對象

#載入訓練數(shù)據(jù)
train = pd.read_csv(train_path, names=FUTURES, header=0)
train_x, train_y = train, train.pop('Species')

標簽數(shù)據(jù)Labels

標簽數(shù)據(jù)應該是一個數(shù)組,依照特征數(shù)據(jù)的順序為每個樣本example做了標記牲芋。在鳶尾花案例中就是用0粗井、1、2標記了每朵鳶尾花的類型街图。


批次尺寸Batch_size

批次尺寸必須是一個整數(shù)浇衬,對模型訓練中的梯度下降運算效率有影響。建議不要超過樣本數(shù)量餐济,32耘擂,64,128...


切片Slices

在鳶尾花案例中使用了tf.data.Dataset.from_tensor_slices方法絮姆,它得到一個tf.data.Dataset對象:

def train_input_fn(features, labels, batch_size):
    dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
    print(dataset)
    ...

打印出來得到一個TensorSliceDataset對象,里面包含了特征列名稱和數(shù)值類型:

<TensorSliceDataset
    shapes: (
        {
          SepalLength: (), PetalWidth: (),
          PetalLength: (), SepalWidth: ()},
        ()),
    types: (
        {
          SepalLength: tf.float64, PetalWidth: tf.float64,
          PetalLength: tf.float64, SepalWidth: tf.float64},
        tf.int64)>

如果我們有個數(shù)據(jù)的形狀shape是(100,28,28),那么就可以把它切成100百個切片醉冤,每個切片是28x28的矩陣秩霍。


操作數(shù)據(jù)

Dataset將按照固定順序進行迭代,每次生成一個元素蚁阳。
然后我們用下面的方法對數(shù)據(jù)進行了處理:

    dataset = dataset.shuffle(1000).repeat().batch(batch_size) 

shuffle,隨機擾亂數(shù)據(jù)铃绒,1000表示使用的緩存數(shù)量,必須比樣本數(shù)量大才有意義螺捐。
repeat,重復颠悬,達到數(shù)據(jù)尾端然后再返回,如果要限定周期數(shù)量定血,可以添加count參數(shù)赔癌。
batch,批次澜沟,將樣本進行堆疊灾票,比如把100個(28,28)的二維數(shù)據(jù)可以堆疊成(100,28,28)的三維數(shù)據(jù)。
如下茫虽,batch之后print(dataset),輸出中出現(xiàn)了問號刊苍,這是由于反復分批次堆疊處理之后,最后一批的數(shù)量并不確定和之前每批次一樣多濒析。

<TensorSliceDataset
    shapes: (
        {
          SepalLength: (?,), PetalWidth: (?,),
          PetalLength: (?,), SepalWidth: (?,)},
        (?,)),

    types: (
        {
          SepalLength: tf.float64, PetalWidth: tf.float64,
          PetalLength: tf.float64, SepalWidth: tf.float64},
        tf.int64)>

張量Tensor

張量是TensorFlow 程序中的主要數(shù)據(jù)結構班缰。張量是 N 維(其中 N 可能非常大)數(shù)據(jù)結構,最常見的是標量悼枢、向量或矩陣埠忘。張量的元素可以包含整數(shù)值、浮點值或字符串值馒索。

Tensor包含兩個屬性:

  • 數(shù)據(jù)類型(例如float32, int32, or string等)
  • 數(shù)據(jù)形狀(定義數(shù)據(jù)的維數(shù)莹妒,特征數(shù)據(jù)中得到或運算時得到)

Tensor內的每個數(shù)據(jù)元素都具有相同的確定類型。
Tensor的維度又叫做等級rank:

Rank Math entity
0 標量Scalar (只有大小之分)
1 向量Vector (有大小和方向的區(qū)別)
2 矩陣Matrix (數(shù)字組成的表)
3 3-Tensor (數(shù)字立方體)
n n-Tensor (...)

#rank0
mammal = tf.Variable("Elephant", tf.string)
ignition = tf.Variable(451, tf.int16)
floating = tf.Variable(3.14159265359, tf.float64)
its_complicated = tf.Variable(12.3 - 4.85j, tf.complex64)

#rank 1
mystr = tf.Variable(["Hello"], tf.string)
cool_numbers  = tf.Variable([3.14159, 2.71828], tf.float32)
first_primes = tf.Variable([2, 3, 5, 7, 11], tf.int32)
its_very_complicated = tf.Variable([12.3 - 4.85j, 7.5 - 6.23j], tf.complex64)

#更高rank
mymat = tf.Variable([[7],[11]], tf.int16)
myxor = tf.Variable([[False, True],[True, False]], tf.bool)
linear_squares = tf.Variable([[4], [9], [16], [25]], tf.int32)
squarish_squares = tf.Variable([ [4, 9], [16, 25] ], tf.int32)
mymatC = tf.Variable([[7],[11]], tf.int32)

表示多張圖片數(shù)據(jù)的rank4張量(數(shù)量X寬X高X顏色)

my_image = tf.zeros([10, 299, 299, 3])  # batch x height x width x color

可以用[n,m]方法獲得張量的特定切片

my_scalar = my_vector[2]
my_scalar = my_matrix[1, 2] #得到的是rank0標量
my_row_vector = my_matrix[2] #得到的是rank1向量
my_column_vector = my_matrix[:, 3] #得到一整列向量

張量的形狀shape是指張量每個元素的維數(shù)绰上。


張量的形狀旨怠、層級、維度

探索人工智能的新邊界

如果您發(fā)現(xiàn)文章錯誤蜈块,請不吝留言指正鉴腻;
如果您覺得有用,請點喜歡百揭;
如果您覺得很有用爽哎,感謝轉發(fā)~


END

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市器一,隨后出現(xiàn)的幾起案子课锌,更是在濱河造成了極大的恐慌,老刑警劉巖祈秕,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡彤避,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門缩擂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事⊥臭妫” “怎么了?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵玻孟,是天一觀的道長唆缴。 經常有香客問我鳍征,道長黍翎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任艳丛,我火速辦了婚禮匣掸,結果婚禮上,老公的妹妹穿的比我還像新娘氮双。我一直安慰自己碰酝,他們只是感情好,可當我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布戴差。 她就那樣靜靜地躺著送爸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪暖释。 梳的紋絲不亂的頭發(fā)上袭厂,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天,我揣著相機與錄音球匕,去河邊找鬼纹磺。 笑死,一個胖子當著我的面吹牛亮曹,可吹牛的內容都是我干的橄杨。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼照卦,長吁一口氣:“原來是場噩夢啊……” “哼式矫!你這毒婦竟也來了?” 一聲冷哼從身側響起役耕,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤衷佃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蹄葱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氏义,經...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡锄列,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惯悠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邻邮。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖克婶,靈堂內的尸體忽然破棺而出筒严,到底是詐尸還是另有隱情,我是刑警寧澤情萤,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布鸭蛙,位于F島的核電站,受9級特大地震影響筋岛,放射性物質發(fā)生泄漏娶视。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一睁宰、第九天 我趴在偏房一處隱蔽的房頂上張望肪获。 院中可真熱鬧,春花似錦柒傻、人聲如沸孝赫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽青柄。三九已至,卻和暖如春预侯,著一層夾襖步出監(jiān)牢的瞬間致开,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工雌桑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喇喉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓校坑,卻偏偏與公主長得像拣技,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耍目,可洞房花燭夜當晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內容