2017-08-16 21 views
0

私はthis scriptを使用して、cifar10データをtfrecordファイルにダウンロードして変換します...問題なく終了し、適切なバイナリファイルがあります。
私は、このスクリプトで自分のファイルをインポートしよう:tfrecordファイルの読み込みが完了しない

"""Provides data for the Cifar10 dataset. 
The dataset scripts used to create the dataset can be found at: 
tensorflow/models/slim/datasets/download_and_convert_cifar10.py 
""" 

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

import os 
import tensorflow as tf 

import dataset_utils 

slim = tf.contrib.slim 

_FILE_PATTERN = 'cifar10_%s.tfrecord' 

SPLITS_TO_SIZES = {'train': 50000, 'test': 10000} 

_NUM_CLASSES = 10 

_ITEMS_TO_DESCRIPTIONS = { 
    'image': 'A [32 x 32 x 3] color image.', 
    'label': 'A single integer between 0 and 9', 
} 


def get_split(split_name, dataset_dir, file_pattern=None, reader=None): 
    """Gets a dataset tuple with instructions for reading cifar10. 
    Args: 
    split_name: A train/test split name. 
    dataset_dir: The base directory of the dataset sources. 
    file_pattern: The file pattern to use when matching the dataset sources. 
     It is assumed that the pattern contains a '%s' string so that the split 
     name can be inserted. 
    reader: The TensorFlow reader type. 
    Returns: 
    A `Dataset` namedtuple. 
    Raises: 
    ValueError: if `split_name` is not a valid train/test split. 
    """ 
    if split_name not in SPLITS_TO_SIZES: 
     raise ValueError('split name %s was not recognized.' % split_name) 

    if not file_pattern: 
     file_pattern = _FILE_PATTERN 
    file_pattern = os.path.join(dataset_dir, file_pattern % split_name) 

    # Allowing None in the signature so that dataset_factory can use the default. 
    if not reader: 
     reader = tf.TFRecordReader 

    keys_to_features = { 
     'image/encoded': 
     tf.FixedLenFeature((), tf.string, default_value=''), 
     'image/format': 
     tf.FixedLenFeature((), tf.string, default_value='png'), 
     'image/class/label': 
     tf.FixedLenFeature(
      [], tf.int64, default_value=tf.zeros([], dtype=tf.int64)), 
    } 

    items_to_handlers = { 
     'image': slim.tfexample_decoder.Image(shape=[32, 32, 3]), 
     'label': slim.tfexample_decoder.Tensor('image/class/label'), 
    } 

    decoder = slim.tfexample_decoder.TFExampleDecoder(keys_to_features, 
                 items_to_handlers) 

    labels_to_names = None 
    if dataset_utils.has_labels(dataset_dir): 
     labels_to_names = dataset_utils.read_label_file(dataset_dir) 

    return slim.dataset.Dataset(
     data_sources=file_pattern, 
     reader=reader, 
     decoder=decoder, 
     num_samples=SPLITS_TO_SIZES[split_name], 
     items_to_descriptions=_ITEMS_TO_DESCRIPTIONS, 
     num_classes=_NUM_CLASSES, 
     labels_to_names=labels_to_names) 


data = get_split('test', '/path/to/cifar10_dir') 

sess = tf.Session(config=tf.ConfigProto(
    allow_soft_placement=True, log_device_placement=False)) 

coord = tf.train.Coordinator() 
threads = tf.train.start_queue_runners(coord=coord, sess=sess) 

data_provider = slim.dataset_data_provider.DatasetDataProvider(
    data, num_readers=10, shuffle=True) 
img, lbl = data_provider.get(['image', 'label']) 

、それはまた、私にエラーを与えていないが、私がしようとすると:

sess.run(img) 

プロセスが停止することはありません。テンソルフローはセッションを開始していますが、ファイルを読み込んでいないため、プロンプトが表示されず、基本的に何もしません。私はどこから始めるべきかわからないので、真剣にここで怒っています。アドバイスを持っている人は誰ですか?

答えて

1

また、キューであるDatasetDataProvider後にqueue runnersを開始する必要があります。次の順序に変更してください:

data_provider = slim.dataset_data_provider.DatasetDataProvider(
data, num_readers=10, shuffle=True) 
img, lbl = data_provider.get(['image', 'label']) 

sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=False)) 

coord = tf.train.Coordinator() 
threads = tf.train.start_queue_runners(coord=coord, sess=sess) 
+0

あなたは英雄です。 DatasetDataProviderもキューであることを指摘してくれてありがとう! –

0

ローカル変数とグローバルvariables_initializersを実行していないようです。

sess = tf.Session(config=tf.ConfigProto(
    allow_soft_placement=True, log_device_placement=False)) 
... 
sess.run([tf.global_variables_initializer(), tf.local_variables_initializer()]) 
img_ = sess.run(img) 
+0

あなたの答えはありがたいです。私はこれらを追加するのを忘れました、それは本当です。しかし悲しいことに私はスクリプトで初期化が必要な変数がないので私の問題を解決していませんでした –

+0

あなたはdata_providerを宣言した後にこのinit opsを実行する必要があります。それはそれを解決する必要があります –

+0

私はそれをデータプロバイダの後に追加...動作しませんでした: -/ –

関連する問題