最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Tensorflow 利用tf.contrib.learn建立輸入函數(shù)的方法

 更新時(shí)間:2018年02月08日 17:01:49   作者:王小草--點(diǎn)絳唇  
這篇文章主要介紹了Tensorflow 利用tf.contrib.learn建立輸入函數(shù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

在實(shí)際的業(yè)務(wù)中,可能會(huì)遇到很大量的特征,這些特征良莠不齊,層次不一,可能有缺失,可能有噪聲,可能規(guī)模不一致,可能類(lèi)型不一樣,等等問(wèn)題都需要我們?cè)诮V?,先預(yù)處理特征或者叫清洗特征。那么這清洗特征的過(guò)程可能涉及多個(gè)步驟可能比較復(fù)雜,為了代碼的簡(jiǎn)潔,我們可以將所有的預(yù)處理過(guò)程封裝成一個(gè)函數(shù),然后直接往模型中傳入這個(gè)函數(shù)就可以啦~~~

接下來(lái)我們看看究竟如何做呢?

1. 如何使用input_fn自定義輸入管道

當(dāng)使用tf.contrib.learn來(lái)訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)時(shí),可以將特征,標(biāo)簽數(shù)據(jù)直接輸入到.fit(),.evaluate(),.predict()操作中。比如在筆記04中就使用到了,復(fù)看一下代碼:

# 將特征與標(biāo)簽數(shù)據(jù)載入
training_set = tf.contrib.learn.datasets.base.load_csv_with_header(
 filename=IRIS_TRAINING, target_dtype=np.int, features_dtype=np.float32)

test_set = tf.contrib.learn.datasets.base.load_csv_with_header(
 filename=IRIS_TEST, target_dtype=np.int, features_dtype=np.float32)


# 然后將兩個(gè)數(shù)據(jù)喂給.fit()函數(shù)去訓(xùn)練
classifier.fit(x=training_set.data,
    y=training_set.target,
    steps=2000)

當(dāng)原始數(shù)據(jù)不需要或幾乎很少需要一些額外的預(yù)處理時(shí),使用以上的方式到也不為過(guò)。然而在實(shí)際的業(yè)務(wù)中我們往往需要去做大量的特征工程,于是tf.contrib.learn支持使用一個(gè)用戶自定義的輸入函數(shù)input_fn來(lái)封裝數(shù)據(jù)預(yù)處理的邏輯,并且將數(shù)據(jù)通過(guò)管道輸送到模型中。

1.1 解剖input_fn函數(shù)的結(jié)構(gòu)

以下是一個(gè)input_fn函數(shù)的基本結(jié)構(gòu):

def my_input_fn():

 # Preprocess your data here...(首先預(yù)處理你的數(shù)據(jù))

 # ...then return 1) a mapping of feature columns to Tensors with
 # the corresponding feature data, and 2) a Tensor containing labels
 # 然后返回新的特征數(shù)據(jù)與標(biāo)簽數(shù)據(jù)(都是以tensor的形式)
 return feature_cols, labels

輸入函數(shù)的主體包括一個(gè)特定的預(yù)處理輸入數(shù)據(jù)的邏輯,比如去除一些臟數(shù)據(jù),彌補(bǔ)缺失數(shù)據(jù),歸一化等等。

輸入函數(shù)的返回是兩個(gè)部分:

(1)處理后的特征:feature_cols,格式是一個(gè)map,key是特征的名稱(chēng),value是tensor形式的對(duì)應(yīng)的特征列數(shù)據(jù)
(2)標(biāo)簽數(shù)據(jù):labels,一個(gè)包含標(biāo)簽數(shù)據(jù)的tensor

1.2 如何將特征數(shù)據(jù)轉(zhuǎn)換成tensors形式

如果你的特征/標(biāo)簽是存儲(chǔ)在pandas的dataframe中或者numpy的array中的話,你就需要在返回特征與標(biāo)簽的時(shí)候?qū)⑺鼈冝D(zhuǎn)換成tensor形式哦~那么怎么轉(zhuǎn)換呢,來(lái)看一個(gè)小例子。

對(duì)于連續(xù)型數(shù)據(jù),你可以使用tf.constant創(chuàng)建一個(gè)tensor:

feature_column_data = [1, 2.4, 0, 9.9, 3, 120]
feature_tensor = tf.constant(feature_column_data)

對(duì)于稀疏型數(shù)據(jù),類(lèi)別下數(shù)據(jù),你可以使用tf.SparseTensor來(lái)創(chuàng)建tensor:

sparse_tensor = tf.SparseTensor(indices=[[0,1], [2,4]],
        values=[6, 0.5],
        dense_shape=[3, 5])

可見(jiàn),tf.SparseTensor有3個(gè)參數(shù),分別是:

(1)dense_shape

這是tensor的shape,比如dense_shape=[3,6],表示tensor有3*6共2個(gè)維度;dense_shape=[2,3,4]表示tensor有2*3*4共3個(gè)維度;dense_shape=[9]表示tensor有1個(gè)維度,這個(gè)維度里有9個(gè)元素。

(2)indices

表示在這個(gè)tensor中indices索引所在的位置是非0值,其余都是0值。比如[0,0]表示在第1行第1列的值非0.

(3)values

value是一個(gè)1維的tensor, 其元素與indices中的索引一一對(duì)應(yīng),比如indices=[[1,3], [2,4]],values=[18, 3.6],表示在行索引為1列索引為3的位置值為18,在行索引為2列索引為4的位置值為3.6

因此上面的代碼意思一目了然了,創(chuàng)建一個(gè)稀疏tensor,大小是3*5,在行索引為0列索引為1的位置值為6,在行索引為2,列索引為4的位置值為0.5,其余位置值為0.

打印出來(lái)應(yīng)是:

[[0, 6, 0, 0, 0]
 [0, 0, 0, 0, 0]
 [0, 0, 0, 0, 0.5]]

1.3 如何將input_fn數(shù)據(jù)傳給模型

在輸入函數(shù)input_fn中封裝好了特征預(yù)處理的邏輯,并且也返回了新的特征與標(biāo)簽。那怎么把這個(gè)輸入函數(shù)或者說(shuō)新的特征與標(biāo)簽傳入模型中呢?

在.fit()操作中有一個(gè)參數(shù):input_fn,只要將我們定義好的輸入函數(shù)傳給這個(gè)參數(shù)即可:

classifier.fit(input_fn=my_input_fn, steps=2000)

但是,極其注意的是絕不能直接這樣做:

classifier.fit(input_fn=my_input_fn(training_set), steps=2000)

如果你想直接傳參數(shù)給輸入函數(shù),可以選擇令?lèi)?ài)幾個(gè)方法:

(1)再寫(xiě)一個(gè)封裝函數(shù)如下:

def my_input_function_training_set():
 return my_input_function(training_set)

classifier.fit(input_fn=my_input_fn_training_set, steps=2000)

(2)使用Python's functools.partial方法:

classifier.fit(input_fn=functools.partial(my_input_function,
           data_set=training_set), steps=2000)

(3)在lambda中調(diào)用輸入函數(shù),然后將參數(shù)傳入input_fn中

classifier.fit(input_fn=lambda: my_input_fn(training_set), steps=2000)

個(gè)人建議使用第三種方法。

2.案例實(shí)戰(zhàn)

2.1 數(shù)據(jù)介紹

數(shù)據(jù)集下載地址:https://archive.ics.uci.edu/ml/datasets/Housing

這是一份預(yù)測(cè)房?jī)r(jià)的數(shù)據(jù),我們用它去訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)去預(yù)測(cè)房?jī)r(jià),總共選取9個(gè)特征,數(shù)據(jù)的特征如下:

要預(yù)測(cè)的標(biāo)簽數(shù)據(jù)是MEDV,是業(yè)主自用住宅的價(jià)格均值。

在開(kāi)始建模之前,我們先去下載好 boston_train.csv(訓(xùn)練集), boston_test.csv(測(cè)試集), and boston_predict.csv(預(yù)測(cè)集)這份文件

2.2 加載數(shù)據(jù)

首先導(dǎo)入需要的庫(kù)(包括pandas, tensorflow),并且設(shè)置logging verbosity為INFO,這樣就可以獲取到更多的日志信息了。

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import itertools

import pandas as pd
import tensorflow as tf

tf.logging.set_verbosity(tf.logging.INFO)

定義一個(gè)變量COLUMNS,將所有的特征名稱(chēng)與類(lèi)別標(biāo)簽名稱(chēng)存儲(chǔ)成list并賦值給他。

為了區(qū)分特征名稱(chēng)與標(biāo)簽名稱(chēng),同時(shí)也將它們分別春初一個(gè)變量

COLUMNS = ["crim", "zn", "indus", "nox", "rm", "age",
   "dis", "tax", "ptratio", "medv"]
FEATURES = ["crim", "zn", "indus", "nox", "rm",
   "age", "dis", "tax", "ptratio"]
LABEL = "medv"

然后,將三份數(shù)據(jù)文件都用pandas.read_csv載入:

第一個(gè)參數(shù)是數(shù)據(jù)文件的路徑,第二個(gè)參數(shù)是是否需要取出前后空值,第三個(gè)參數(shù)是去除的行數(shù),第四個(gè)參數(shù)是列名

training_set = pd.read_csv("boston_train.csv", skipinitialspace=True,
       skiprows=1, names=COLUMNS)

test_set = pd.read_csv("boston_test.csv", skipinitialspace=True,
      skiprows=1, names=COLUMNS)

prediction_set = pd.read_csv("boston_predict.csv", skipinitialspace=True,
        skiprows=1, names=COLUMNS)

2.3 定義特征列并且創(chuàng)建回歸模型

現(xiàn)在創(chuàng)建一組FeatureColumn作為輸入數(shù)據(jù),正式指定哪些特征需要被用來(lái)訓(xùn)練。在我們的房?jī)r(jià)預(yù)測(cè)特征中所有數(shù)據(jù)都是連續(xù)型的值,因此你可以直接使用tf.contrib.layers.real_valued_column()來(lái)創(chuàng)建FeatureColumn

feature_cols = [tf.contrib.layers.real_valued_column(k)
     for k in FEATURES]

接著我們來(lái)調(diào)用DNNRegressor函數(shù)實(shí)例化一個(gè)神經(jīng)網(wǎng)絡(luò)回歸模型。

這里需要提供3個(gè)參數(shù):

  1. feature_columns:一組剛剛定義的特征列
  2. hidden_units:每層隱藏層的神經(jīng)網(wǎng)絡(luò)個(gè)數(shù)
  3. model_dir:模型保存的路徑
regressor = tf.contrib.learn.DNNRegressor(feature_columns=feature_cols,
           hidden_units=[10, 10],
           model_dir="/tmp/boston_model")

2.4 構(gòu)建輸入函數(shù)input_fn

這里我們構(gòu)建一個(gè)輸入函數(shù)去預(yù)處理數(shù)據(jù),處理的內(nèi)容比較簡(jiǎn)單,只是將用pandas讀進(jìn)來(lái)的dataframe形式的數(shù)據(jù)轉(zhuǎn)換成tensor.

def input_fn(data_set):
 feature_cols = {k: tf.constant(data_set[k].values)
     for k in FEATURES}
 labels = tf.constant(data_set[LABEL].values)
 return feature_cols, labels

2.5 訓(xùn)練模型

訓(xùn)練模型,我們調(diào)用fit()函數(shù),并且將訓(xùn)練數(shù)據(jù)集training_set作為參數(shù)傳入

regressor.fit(input_fn=lambda: input_fn(training_set), steps=5000)

運(yùn)行代碼,你會(huì)看到有如下日志打?。?/p>

INFO:tensorflow:Step 1: loss = 483.179
INFO:tensorflow:Step 101: loss = 81.2072
INFO:tensorflow:Step 201: loss = 72.4354
...
INFO:tensorflow:Step 1801: loss = 33.4454
INFO:tensorflow:Step 1901: loss = 32.3397
INFO:tensorflow:Step 2001: loss = 32.0053
INFO:tensorflow:Step 4801: loss = 27.2791
INFO:tensorflow:Step 4901: loss = 27.2251
INFO:tensorflow:Saving checkpoints for 5000 into /tmp/boston_model/model.ckpt.
INFO:tensorflow:Loss for final step: 27.1674.

2.6 評(píng)估模型

模型訓(xùn)練好,就到了評(píng)估的時(shí)刻了,還是用測(cè)試數(shù)據(jù)集test_set來(lái)評(píng)估

ev = regressor.evaluate(input_fn=lambda: input_fn(test_set), steps=1)

提取損失并打印:

loss_score = ev["loss"]
print("Loss: {0:f}".format(loss_score))

打印結(jié)果應(yīng)如下:

INFO:tensorflow:Eval steps [0,1) for training step 5000.
INFO:tensorflow:Saving evaluation summary for 5000 step: loss = 11.9221
Loss: 11.922098

2.7 使用模型做預(yù)測(cè)

模型要是評(píng)估通過(guò),就可以用來(lái)預(yù)測(cè)新的數(shù)據(jù)了呢,這里我們使用prediction_set這個(gè)數(shù)據(jù)集,數(shù)據(jù)中只包含了特征沒(méi)有標(biāo)簽,需要我們?nèi)ヮA(yù)測(cè)。

y = regressor.predict(input_fn=lambda: input_fn(prediction_set))

# .predict() returns an iterator; convert to a list and print predictions

predictions = list(itertools.islice(y, 6))
print ("Predictions: {}".format(str(predictions)))

打印結(jié)果如下:

Predictions: [ 33.30348587  17.04452896  22.56370163  34.74345398  14.55953979
  19.58005714]

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何解決PyTorch程序占用較高CPU問(wèn)題

    如何解決PyTorch程序占用較高CPU問(wèn)題

    這篇文章主要介紹了如何解決PyTorch程序占用較高CPU問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 使用python實(shí)現(xiàn)strcmp函數(shù)功能示例

    使用python實(shí)現(xiàn)strcmp函數(shù)功能示例

    這篇文章主要介紹了使用python實(shí)現(xiàn)strcmp函數(shù)功能的示例,需要的朋友可以參考下
    2014-03-03
  • Python中django學(xué)習(xí)心得

    Python中django學(xué)習(xí)心得

    這篇文章主要介紹了Python中django Web應(yīng)用框架的學(xué)習(xí)做了總結(jié)并把心得體會(huì)寫(xiě)了一下,大家一起參考下吧。
    2017-12-12
  • python數(shù)字圖像處理實(shí)現(xiàn)直方圖與均衡化

    python數(shù)字圖像處理實(shí)現(xiàn)直方圖與均衡化

    在圖像處理中,直方圖是非常重要,也是非常有用的一個(gè)處理要素。這篇文章主要介紹了python數(shù)字圖像處理實(shí)現(xiàn)直方圖與均衡化,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python?遺傳算法處理TSP問(wèn)題詳解

    Python?遺傳算法處理TSP問(wèn)題詳解

    遺傳算法(Genetic?Algorithm,?GA)是模擬達(dá)爾文生物進(jìn)化論的自然選擇和遺傳學(xué)機(jī)理的生物進(jìn)化過(guò)程的計(jì)算模型,是一種通過(guò)模擬自然進(jìn)化過(guò)程搜索最優(yōu)解的方法
    2022-11-11
  • 基于Opencv圖像識(shí)別實(shí)現(xiàn)答題卡識(shí)別示例詳解

    基于Opencv圖像識(shí)別實(shí)現(xiàn)答題卡識(shí)別示例詳解

    這篇文章主要為大家詳細(xì)介紹了基于OpenCV如何實(shí)現(xiàn)答題卡識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 使用Python實(shí)現(xiàn)MP3格式轉(zhuǎn)化

    使用Python實(shí)現(xiàn)MP3格式轉(zhuǎn)化

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)MP3格式轉(zhuǎn)化為wav,flac和ogg等,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2025-01-01
  • 詳解Python如何獲取和理用戶的連續(xù)輸入

    詳解Python如何獲取和理用戶的連續(xù)輸入

    這篇文章主要為大家詳細(xì)介紹了如何在?Python?中獲取和處理用戶的連續(xù)輸入,包括基本的輸入方法、輸入驗(yàn)證、異常處理以及一些常見(jiàn)的應(yīng)用場(chǎng)景,感興趣的可以了解下
    2024-03-03
  • Python學(xué)習(xí)之私有函數(shù),私有變量及封裝詳解

    Python學(xué)習(xí)之私有函數(shù),私有變量及封裝詳解

    私有函數(shù)與私有變量中的私有就是獨(dú)自擁有、不公開(kāi)、不分享的意思。放到函數(shù)與變量中就是獨(dú)自擁有的函數(shù)與獨(dú)自擁有的變量,并且不公開(kāi)。本文將通過(guò)示例詳細(xì)講解Python中的私有函數(shù)、私有變量及封裝,感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • python基礎(chǔ)之文件操作

    python基礎(chǔ)之文件操作

    這篇文章主要介紹了python基礎(chǔ)之文件操作,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有一定的幫助,需要的朋友可以參考下
    2021-04-04

最新評(píng)論

册亨县| 昭通市| 广西| 浦江县| 阿拉尔市| 庄河市| 琼结县| 新乡县| 井冈山市| 洛川县| 日土县| 和田市| 涟源市| 永善县| 景洪市| 花莲县| 闵行区| 清丰县| 辉县市| 本溪市| 温宿县| 城市| 泸定县| 定结县| 民丰县| 册亨县| 鄯善县| 遵义市| 达州市| 浦东新区| 泽普县| 永春县| 黑龙江省| 威远县| 个旧市| 漳浦县| 思南县| 东莞市| 大田县| 甘孜| 子洲县|