Я хочу создать конвейер для предоставления нестандартных файлов в нейронную сеть (например, с расширением * .xxx).
В настоящее время я структурировал свой код следующим образом:
1) Я определяю список путей, где найти учебные файлы
2) Я определяю экземпляр объекта tf.data.Dataset, содержащий эти пути
3) я сопоставляю с набором данных функцию python, которая берет каждый путь и возвращает связанный массив numpy (загруженный из папки на компьютере); этот массив представляет собой матрицу с размерами [256, 256, 192].
4) Я определяю инициализируемый итератор, а затем использую его во время обучения по сети.
Мое сомнение заключается в размере пакета, который я предоставляю сети. Я хотел бы, чтобы в сеть были доставлены партии размером 64. Как я мог сделать?
Например, если я использую функцию train_data.batch (b_size) с b_size = 1, то получается, что при повторении итератор дает один элемент формы [256, 256, 192]; Что делать, если я хочу накормить нейронную сеть всего 64 кусочками этого массива?
Это выдержка из моего кода:
with tf.name_scope('data'):
train_filenames = tf.constant(list_of_files_train)
train_data = tf.data.Dataset.from_tensor_slices(train_filenames)
train_data = train_data.map(lambda filename: tf.py_func(
self._parse_xxx_data, [filename], [tf.float32]))
train_data.shuffle(buffer_size=len(list_of_files_train))
train_data.batch(b_size)
iterator = tf.data.Iterator.from_structure(train_data.output_types, train_data.output_shapes)
input_data = iterator.get_next()
train_init = iterator.make_initializer(train_data)
[...]
with tf.Session() as sess:
sess.run(train_init)
_ = sess.run([self.train_op])
Большое спасибо заранее