1
私はオーディオファイルの分類子を習得しようとしています。私は自分のWAVファイルを読んで、カスタムPython機能のトレーニングのためにスペクトログラム画像のシーケンスに変換します。この関数はtf.py_func
で呼び出され、同じ形の画像の配列を返します。換言すれば、画像形状は明確に定義されているが、画像の数は動的である。 (例えば、短いオーディオスニペットの場合3つのスペクトログラム、長いスニペットの場合15つ)Tensorflow操作で可変長データを生成
tf.train.batch_join()
でさらに処理/エンキューするために結果リストをアンパックする方法はありますか?定義されていないシーケンスの長さは、多くのTF操作で問題になるようです。長さを何らかの形で推測することはできますか?
...
// Read the audio file name and label from a CSV file
audio_file, label = tf.decode_csv(csv_content)
def read_audio(audio_file):
signal = read_wav(audio_file)
images = [generate_image(segment) for segment in split_audio(signal)]
// This output is of varying length depending on the length of audio file.
return images
// Convert audio file to a variable length sequence of images
// Shape: <unknown>, which is to be expected from tf.py_func
image_sequence = tf.py_func(wav_to_spectrogram, [audio_file], [tf.float32])[0]
// Auxilliary to set a shape for the images defined in tf.py_func
def process_image(in_image):
image = tf.image.convert_image_dtype(in_image, dtype=tf.float32)
image.set_shape([600, 39, 1])
return (image, label)
// Shape: (?, 600, 39, 1)
images_labels = tf.map_fn(process_image, image_sequence, dtype=(tf.float32, tf.int32))
// This will not work. 'images_and_labels' needs to be a list
images, label_index_batch = tf.train.batch_join(
images_and_labels,
batch_size=batch_size,
capacity=2 * num_preprocess_threads * batch_size,
shapes=[data_shape, []],
)
もう一つが表示されるはずです。私はこの例題が何をしているのか理解していますが、私は 'ラベルの部分'がありません。各ラベルをシーケンスにマージ/結合するにはどうすればよいですか? 'py_func'の各可変長出力は' tf.train.batch() 'に入力するときにそのラベルと対になっていなければなりません。どうやってやるの? – Tom