これについてのいくつかの質問
Tensorflowで次のようなことをしたい場合(WAVファイルをロードしてトレーニング例を作成していると仮定します):
import tensorflow as tf
def _some_audio_preprocessing_func(filename):
# ... some logic here which mostly uses Tensorflow ops ...
with tf.Session(graph=tf.Graph()) as sess:
wav_filename_placeholder = tf.placeholder(tf.string, [])
wav_loader = io_ops.read_file(wav_filename_placeholder)
wav_decoder = contrib_audio.decode_wav(wav_loader, desired_channels=1)
data = sess.run(
[wav_decoder],
feed_dict={wav_filename_placeholder: filename})
return data
dataset = tf.data.Dataset.list_files('*.wav')
dataset = dataset.map(_some_preprocessing_func)
ありがとう!
Dataset.map(map_func)
を使用すると、TensorFlowは関数_map_func
_で作成されたすべての操作のサブグラフを定義し、同じ場所で効率的に実行するように調整しますグラフの残りの部分としてのセッション。 _tf.Graph
_内に_tf.Session
_または_map_func
_を作成する必要はほとんどありません。解析関数がTensorFlow opsで構成されている場合、これらのopsは、を定義するグラフに直接埋め込むことができます。入力パイプライン。
_tf.data
_を使用したコードの変更バージョンは次のようになります。
_import tensorflow as tf
from tensorflow.contrib.framework.python.ops import audio_ops as contrib_audio
def _some_audio_preprocessing_func(filename):
wav_loader = tf.read_file(filename)
return contrib_audio.decode_wav(wav_loader, desired_channels=1)
dataset = tf.data.Dataset.list_files('*.wav')
dataset = dataset.map(_some_preprocessing_func)
_
_map_func
_に、各要素に適用するTensorFlow以外の操作が含まれている場合は、それらを tf.py_func()
(または Dataset.from_generator()
、データ生成プロセスがPythonロジック)で定義されている場合。主なパフォーマンスへの影響は、 tf.py_func()
はグローバルインタープリターロックの対象となるため、パフォーマンスが重要なものについては、ネイティブのTensorFlow実装を探すことをお勧めします。