天天看點

【Tensorflow slim】slim.data包

TensorFlow是谷歌基于DistBelief進行研發的第二代人工智能學習系統,其命名來源于本身的運作原理。Tensor(張量)意味着N維數組,Flow(流)意味着基于資料流圖的計算,TensorFlow為張量從流圖的一端流動到另一端計算過程。TensorFlow是将複雜的資料結構傳輸至人工智能神經網中進行分析和處理過程的系統。

TensorFlow可被用于語音識别或圖像識别等多項機器深度學習領域,對2011年開發的深度學習基礎架構DistBelief進行了各方面的改進,它可在小到一部智能手機、大到數千台資料中心伺服器的各種裝置上運作。TensorFlow将完全開源,任何人都可以用。

原生接口文章

  1. 【Tensorflow】tf.placeholder函數
  2. 【TensorFlow】tf.nn.conv2d是怎樣實作卷積的
  3. 【TensorFlow】tf.nn.max_pool實作池化操作
  4. 【Tensorflow】tf.nn.relu函數
  5. 【Tensorflow】tf.reshape 函數
  6. 【Tensorflow】tf.nn.dropout函數
  7. 【Tensorflow】tf.argmax函數
  8. 【Tensorflow】tf.cast 類型轉換 函數
  9. 【Tensorflow】tf.train.AdamOptimizer函數
  10. 【Tensorflow】tf.Graph()函數
  11. 【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法
  12. 【Tensorflow】tf.dynamic_partition 函數 分拆數組

     原生接口執行個體

  1. 【Tensorflow】實作簡單的卷積神經網絡CNN實際代碼
  2. 【Tensorflow 實戰】實作歐式距離

         slim接口文章

  1. 【Tensorflow】tensorflow.contrib.slim 包
  2. 【Tensorflow slim】 slim.arg_scope的用法
  3. 【Tensorflow slim】slim.data包
  4. 【Tensorflow slim】slim evaluation 函數
  5. 【Tensorflow slim】slim layers包
  6. 【Tensorflow slim】slim learning包
  7. 【Tensorflow slim】slim losses包
  8. 【Tensorflow slim】slim nets包
  9. 【Tensorflow slim】slim variables包
  10. 【Tensorflow slim】slim metrics包

        slim 執行個體

  1. 【Tensorflow slim 實戰】寫MobileNet
  2. 【Tensorflow slim 實戰】寫Inception-V4 Inception-ResNet-v2結構

         kera 接口文章

  1. 【Tensorflow keras】Keras:基于Theano和TensorFlow的深度學習庫
  2. 【Tensorflow keras】輕量級深度學習架構 Keras簡介

         tensorflow使用過程中的輔助接口或通過tensorflow實作的批量操作接口

  1. 将非RGB圖檔轉換為RGB圖檔
  2. 【opencv】python3 将圖檔生成視訊檔案
  3. 【opencv】selective_search函數

=========================================================================

slim.data包下面有很多對資料的操作方法;在slim.__init__種有如下幾種:

from tensorflow.contrib.slim.python.slim.data import data_decoder
from tensorflow.contrib.slim.python.slim.data import data_provider
from tensorflow.contrib.slim.python.slim.data import dataset
from tensorflow.contrib.slim.python.slim.data import dataset_data_provider
from tensorflow.contrib.slim.python.slim.data import parallel_reader
from tensorflow.contrib.slim.python.slim.data import prefetch_queue
from tensorflow.contrib.slim.python.slim.data import tfexample_decoder
           

Data Decoder

# Load the data
my_encoded_data = ...
data_decoder = slim.DataDecoder()

# 解析輸入和标簽:
decoded_input, decoded_labels = data_decoder.Decode(data, ['input', 'labels'])

# 隻解析輸入:
decoded_input = data_decoder.Decode(data, ['input'])

# Check which items a data decoder knows how to decode:
for item in data_decoder.list_items():
  print(item)
           

Data Provider

provider = slim.DataProvider(...)
image, sentence, clazz = provider.get(['image', 'sentence', 'class'])
           

DataSet

dataset = slim.dataset.Dataset(
            data_sources='./pascal_train_*.tfrecord',
            reader=tf.TFRecordReader,
            num_samples = 3, # 手動生成了三個樣本集
            decoder=decoder,
            items_to_descriptions = {},
            num_classes=21)
           

Data Data Provider

shuffle=Flase,主要的話,每一次取的資料是一樣的

pascal_voc_data_provider = slim.DatasetDataProvider(
      slim.datasets.pascal_voc.get_split('train'),
      shuffle=False)
  images, labels = pascal_voc_data_provider.get(['images', 'labels'])
           

shuffle=True,每一次取的資料會進行洗牌,取的結果和上傳會不一樣的

pascal_voc_data_provider = slim.DatasetDataProvider(
      slim.datasets.pascal_voc.Dataset(),
      num_readers=10,
      shuffle=True)
  images, labels = pascal_voc_data_provider.get(['images', 'labels'])
           

分開取元素

[images] = pascal_voc_data_provider.get(['images'])
[labels] = pascal_voc_data_provider.get(['labels'])
           

Parallel Reader

通過隊列和可選洗牌實作并行資料讀取器

common_queue = tf.RandomShuffleQueue(
          capacity=256,
          min_after_dequeue=128,
          dtypes=[tf.string, tf.string])
p_reader = slim.ParallelReader(tf.TFRecordReader, common_queue)
common_queue = tf.FIFOQueue(
          capacity=256,
          dtypes=[tf.string, tf.string])
p_reader = slim.ParallelReader(readers, common_queue, num_readers=2)
           

Prefetch Queue

預取隊列

images, labels = tf.train.batch([image, label], batch_size=32, num_threads=4)
batch_queue = slim.prefetch_queue([images, labels])
images, labels = batch_queue.dequeue()
logits = Net(images)
loss = Loss(logits, labels)
           

繼續閱讀