データセット API とともに tensorflow ステージング エリアを取り込もうとしています。
compute_stage_put_op = compute_stage.put(iterator.get_next())
if compute_stage_put_op.type == 'Stage':
compute_stage_ops.append(compute_stage_put_op)
数百のステップを完了した後、以下のエラーが発生します。
ValueError: Fetch argument <tf.Operation 'group_deps' type=NoOp>
cannot be interpreted as a Tensor. (Operation name:
"group_deps" op: "NoOp")
スタックトレース:
Traceback (most recent call last):
ファイル「timit_trainer.py」、5 行目、timit_trainer.train() ファイル「/mnt/sdc/nlp/workspace/hci/nlp/mapc/core/model/model.py」、43 行目、train hparams=self .hyper_params # HParams ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/contrib/learn/python/learn/learn_runner.py"、218 行目、実行中 return _execute_schedule(experiment, schedule) ファイル " /usr/local/lib/python3.5/dist-packages/tensorflow/contrib/learn/python/learn/learn_runner.py」、46 行目、_execute_schedule return task() ファイル「/usr/local/lib/python3. 5/dist-packages/tensorflow/contrib/learn/python/learn/experiment.py"、625 行目、train_and_evaluate self.train(delay_secs=0) ファイル"/usr/local/lib/python3.5/dist-packages /tensorflow/contrib/learn/python/learn/experiment.py"、367 行目、train hooks=self._train_monitors + extra_hooks 内) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/contrib/learn/python/learn/experiment.py"、807 行目、_call_train hooks=hooks 内) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/estimator/estimator.py"、302 行目、train loss = self._train_model(input_fn, hooks, Saving_listeners) ファイル "/usr /local/lib/python3.5/dist-packages/tensorflow/python/estimator/estimator.py"、783 行目、_train_model _、損失 = mon_sess.run([estimator_spec.train_op, estimator_spec.loss]) ファイル"/ usr/local/lib/python3.5/dist-packages/tensorflow/python/training/monitored_session.py"、521 行目、実行中 run_metadata=run_metadata) ファイル "/usr/local/lib/python3.5/dist-packages /tensorflow/python/training/monitored_session.py",行 892、実行中 run_metadata=run_metadata) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/monitored_session.py"、行 967、実行中 raise six.reraise(*original_exc_info)ファイル「/usr/local/lib/python3.5/dist-packages/six.py」、693行目、値を上げ直すファイル「/usr/local/lib/python3.5/dist-packages/tensorflow/python/」 training/monitored_session.py"、952 行目、実行中 return self._sess.run(*args, **kwargs) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/monitored_session .py」、1032 行目、run_metadata=run_metadata)) ファイル「/usr/local/lib/python3.5/dist-packages/tensorflow/contrib/learn/python/learn/monitors.py」、1196 行目after_run Induce_stop = m.step_end(self._last_step, result) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/contrib/learn/python/learn/monitors.py"、356 行目、step_end で self.every_n_step_end(step, output) を返すファイル "/usr/local /lib/python3.5/dist-packages/tensorflow/contrib/learn/python/learn/monitors.py"、694 行目、every_n_step_end validation_outputs = self._evaluate_estimator() ファイル"/usr/local/lib/python3.5 /dist-packages/tensorflow/contrib/learn/python/learn/monitors.py"、665 行目、_evaluate_estimator name=self.name 内) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/ python/estimator/estimator.py"、355 行目、評価名 = 名前) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/estimator/estimator.py"、839 行目_evaluate_model config=self._session_config) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/evaluation.py"、206 行目、_evaluate_once session.run(eval_ops, feed_dict) ファイル"/usr/local/lib/python3.5/dist-packages/tensorflow/python /training/monitored_session.py"、521 行目、実行中 run_metadata=run_metadata) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/monitored_session.py"、892 行目、実行中run_metadata=run_metadata) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/monitored_session.py", 行 967, in run raise six.reraise(*original_exc_info) ファイル "/usr/ local/lib/python3.5/dist-packages/six.py"、693 行目、リレイズ レイズ値ファイル"/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/monitored_session.py "、952 行目、実行中の return self._sess.run(*args, **kwargs) File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/monitored_session.py", line 1024, in run_metadata=run_metadata) File "/usr /local/lib/python3.5/dist-packages/tensorflow/python/training/monitored_session.py"、827 行目、実行中 return self._sess.run(*args, **kwargs) ファイル "/usr/local/ lib/python3.5/dist-packages/tensorflow/python/client/session.py"、889 行目、実行中 run_metadata_ptr) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client /session.py"、1105 行目、_run self._graph、fetches、feed_dict_tensor、feed_handles=feed_handles) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py" 、414行目、5/dist-packages/tensorflow/python/training/monitored_session.py"、1024 行目、実行中 run_metadata=run_metadata) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/monitored_session .py"、827 行目、実行中 return self._sess.run(*args, **kwargs) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py" 、889 行目、実行中 run_metadata_ptr) ファイル「/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py」、1105 行目、_run self._graph、fetches、feed_dict_tensor、feed_handles =feed_handles) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py"、414 行目5/dist-packages/tensorflow/python/training/monitored_session.py"、1024 行目、実行中 run_metadata=run_metadata) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/monitored_session .py"、827 行目、実行中 return self._sess.run(*args, **kwargs) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py" 、889 行目、実行中 run_metadata_ptr) ファイル「/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py」、1105 行目、_run self._graph、fetches、feed_dict_tensor、feed_handles =feed_handles) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py"、414 行目5/dist-packages/tensorflow/python/training/monitored_session.py"、827 行目、実行中 return self._sess.run(*args, **kwargs) ファイル "/usr/local/lib/python3.5/dist -packages/tensorflow/python/client/session.py", 行 889, 実行中 run_metadata_ptr) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py", 行1105、_run self._graph、fetches、feed_dict_tensor、feed_handles=feed_handles で) ファイル「/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py」、414 行目5/dist-packages/tensorflow/python/training/monitored_session.py"、827 行目、実行中 return self._sess.run(*args, **kwargs) ファイル "/usr/local/lib/python3.5/dist -packages/tensorflow/python/client/session.py", 行 889, 実行中 run_metadata_ptr) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py", 行1105、_run self._graph、fetches、feed_dict_tensor、feed_handles=feed_handles で) ファイル「/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py」、414 行目5/dist-packages/tensorflow/python/client/session.py"、1105 行目、_run self._graph、fetches、feed_dict_tensor、feed_handles=feed_handles) ファイル "/usr/local/lib/python3.5/dist-packages /tensorflow/python/client/session.py」の 414 行目5/dist-packages/tensorflow/python/client/session.py"、1105 行目、_run self._graph、fetches、feed_dict_tensor、feed_handles=feed_handles) ファイル "/usr/local/lib/python3.5/dist-packages /tensorflow/python/client/session.py」の 414 行目init self._fetch_mapper = _FetchMapper.for_fetch(fetches) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py"、236 行目、for_fetch で _DictFetchMapper(fetch) ファイルを返す「/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py」、374 行 目、fetches.values() のフェッチの初期化] ファイル「/usr/local/lib / python3.5/dist-packages/tensorflow/python/client/session.py"、374 行目、fetches.values() のフェッチの場合] ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow /python/client/session.py"、234 行目、for_fetch return _ListFetchMapper(fetch) ファイル内"/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py"、341 行目、初期化中 self._mappers = [_FetchMapper.for_fetch(fetch) for fetches in fetches] ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py"、341 行目、self. _mappers = [_FetchMapper.for_fetch(fetch) for fetches] ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py"、234 行目、for_fetch で return _ListFetchMapper( fetch) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py"、341 行目、init self._mappers = [_FetchMapper.for_fetch(fetch) for fetches in fetches] ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py"、341 行目、self. _mappers = [_FetchMapper.for_fetch(fetch) for fetches] ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py"、242 行目、for_fetch で return _ElementFetchMapper( fetches, contraction_fn) ファイル "/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py"、278 行目、init 'Tensor. (%s)' % (fetch, str(e))) ValueError: フェッチ引数をテンソルとして解釈できません。(操作名:「StagingArea_put」
コード:
デフ読み取り (自己、カテゴリ: DatasetCategory、デバイス: リスト、proc_device: str、シャッフル = False):
batch_size = ds.BATCH_SIZE
record_store_exists, record_store = self.__get_store_info(store_path=fu.join_path(self.store_dir, self.store_name + '_' + category.name + '.tfrecord'), create_new=False)
logger.info('Reading records. category: {}, store_exists:{}, store;{}'.format(category.name, str(record_store_exists), record_store))
if not record_store_exists:
self.__process()
record_store_exists, record_store = self.__get_store_info(store_path=fu.join_path(self.store_dir, self.store_name + '_' + category.name + '.tfrecord'), create_new=False)
iterator_init_hook = SessionRunHook()
map_fn = self.__parse_function
gpu_copy_stage_ops = []
gpu_compute_stage_ops = []
def input_fn():
file_names = tf.placeholder(dtype=tf.string, shape=[None], name='data_store')
dataset = tf.data.TFRecordDataset(filenames=file_names, buffer_size=2000000000) # 2.0GB
dataset = dataset.map(map_func=map_fn, num_parallel_calls=tf.constant(value=20000, dtype=tf.int32))
if shuffle:
dataset = dataset.shuffle(buffer_size=tf.constant(value=1000 * batch_size, dtype=tf.int64))
dataset = dataset.repeat(None) # Infinite iterations
dataset = dataset.padded_batch(batch_size=tf.constant(value=batch_size, dtype=tf.int64), padded_shapes=([None, ds.NUM_INPUT_FEATURES], [], [None], []))
iterator = dataset.make_initializable_iterator()
iterator_init_hook.run_func = lambda session: session.run(iterator.initializer, feed_dict={file_names: [record_store]})
gpu_copy_stage = StagingArea(dtypes=[tf.float32, tf.int32, tf.int32, tf.int32],
shapes=[[batch_size, None, ds.NUM_INPUT_FEATURES], [batch_size], [batch_size, None], [batch_size]])
gpu_compute_stage = StagingArea(dtypes=[tf.float32, tf.int32, tf.int32, tf.int32],
shapes=[[batch_size, None, ds.NUM_INPUT_FEATURES], [batch_size], [batch_size, None], [batch_size]])
features_dict = {}
labels_dict = {}
for index, device in enumerate(devices):
with tf.device(proc_device):
gpu_copy_stage_ops.append(gpu_copy_stage.put(iterator.get_next()))
with tf.device(device):
gpu_compute_stage_ops.append(gpu_compute_stage.put(gpu_copy_stage.get()))
source, source_len, target, target_len = gpu_compute_stage.get()
if ds.USE_WARP_CTC:
targets = []
for bi in range(batch_size):
targets.append(target[bi])
target = tf.concat(targets, axis=0)
features_dict[device] = {'source': source, 'source_len': source_len}
labels_dict[device] = {'target': target, 'target_len': target_len}
return features_dict, labels_dict
copy_stage_hook = StepOpsRunHook(ops=[gpu_copy_stage_ops], every_n_secs=1)
compute_stage_hook = StepOpsRunHook(ops=[gpu_compute_stage_ops], every_n_steps=1)
return input_fn, [iterator_init_hook, copy_stage_hook, compute_stage_hook]