Ответ 1
Я успешно запускаю код CIFAR10 на нескольких моих собственных наборах данных. Я верю, что смогу дать вам хороший ответ.
Прежде чем мы это сделаем, нам нужно понять формат, в котором находится набор данных CIFAR10. Если мы ссылаемся на https://www.cs.toronto.edu/~kriz/cifar.html и, раздел "Двоичная версия", мы видим следующее:
Другими словами, первый байт является меткой первого изображения, которое - это число в диапазоне 0-9. Следующие 3072 байта являются значениями пиксели изображения. Первые 1024 байта - красный канал значения, следующий 1024 - зеленый, а последний 1024 - синий. значения хранятся в строчном порядке, поэтому первые 32 байта являются красные значения канала для первой строки изображения.
Интуитивно, нам нужно сохранить данные в этом формате. Сначала вы можете сделать как базовый эксперимент, чтобы получить изображения, которые имеют одинаковый размер и одинаковое количество классов, таких как CIFAR10, и помещать их в этот формат. Это означает, что ваши изображения должны иметь размер 32x32x3 и иметь 10 классов. Если вы можете успешно запустить это, вы можете перейти дальше, чтобы учитывать такие случаи, как одиночные каналы, разные входы по размеру и разные классы. Это означает, что вы должны изменить многие переменные в других частях кода. Вы должны медленно прокладывать себе путь.
Я занимаюсь разработкой общего модуля. Мой код для этого находится в https://github.com/jkschin/svhn. Если вы ссылаетесь на код svhn_flags.py, вы увидите там много флагов, которые могут быть изменены в соответствии с вашими потребностями. Я признаю это загадочным сейчас, так как я его не очистил, так что он читаем, но он работает. Если вы готовы потратить некоторое время на грубый взгляд, вы увидите что-то.
Это, вероятно, простой способ запускать собственный набор данных на CIFAR10. Вы могли бы, конечно, просто скопировать определение нейронной сети и реализовать свой собственный читатель, формат ввода, пакетную обработку и т.д., Но если вы хотите, чтобы он работал быстро и просто, настройте свои входы для соответствия CIFAR10.
Надеюсь, это поможет.
EDIT:
Какой-то действительно действительно базовый код, который, я надеюсь, поможет.
from PIL import Image
import numpy as np
im = Image.open('images.jpeg')
im = (np.array(im))
r = im[:,:,0].flatten()
g = im[:,:,1].flatten()
b = im[:,:,2].flatten()
label = [1]
out = np.array(list(label) + list(r) + list(g) + list(b),np.uint8)
out.tofile("out.bin")
Это преобразует изображение в файл байта, который готов к использованию в CIFAR10. Для нескольких изображений просто продолжайте конкатенировать массивы, как указано в формате выше. Чтобы проверить правильность формата, в частности, для варианта использования Asker, вы должны получить размер файла 427 * 427 * 3 + 1 = 546988 байт. Предполагая, что ваши снимки имеют RGB, а значения находятся в диапазоне от 0 до 255. После того, как вы подтвердите это, вы все настроитесь на запуск в TensorFlow. Используйте TensorBoard, чтобы визуализировать одно изображение, чтобы гарантировать правильность.
ИЗМЕНИТЬ 2:
В соответствии с вопросом Asker в комментариях
if not eval_data:
filenames = [os.path.join(data_dir, 'data_batch_%d.bin' % i)
for i in xrange(1, 6)]
Если вы действительно хотите, чтобы это работало, вам нужно изучить вызовы функций кода CIFAR10. В cifar10_input пакеты жестко запрограммированы. Поэтому вам нужно отредактировать эту строку кода, чтобы она соответствовала имени файла bin. Или просто распределите изображения в 6 файлов bin равномерно.