Чтение содержимого Minibacth вручную в CNTK

Я изменяю CNTK 103B MNIST Tutorial для чтения файлов PNG непосредственно вместо исходного текстового файла. У меня возникают проблемы со сходимостью модели при внесении изменений, и я хотел бы проверить содержимое мини-пакетов, которые считываются из файлов PNG, чтобы убедиться, что это не причина, по которой модель перестает работать после изменения источника обучения. данные.

После этого кода:

mb = reader_test.next_minibatch(test_minibatch_size, input_map=input_map)

Есть ли способ проверить содержимое мини-пакета в python?


person David Ruiz    schedule 23.02.2017    source источник


Ответы (1)


mb — это просто словарь от переменных до minibatch_data. Данные мини-пакета имеют атрибут .value, который вы можете использовать, чтобы увидеть мини-пакет как массив numpy. Так что что-то вроде for var in mb: print('minibatch data for variable "%s" with shape %s'%(var.name, var.shape)) print(mb[var].value) будет работать. Однако печать плотного вектора 784, скорее всего, не очень поможет. К счастью, можно легко преобразовать каждый элемент мини-пакета в квадрат 28 x 28 и отобразить его в виде изображения внутри блокнота.

person Nikos Karampatziakis    schedule 24.02.2017
comment
Это сработало. Я смог нарисовать изображения красным с помощью мини-пакета. Я обнаружил, что десериализатор изображений неправильно считывает 1-канальные PNG-изображения. Загружаемое изображение не является исходным PNG, а представляет собой несколько белых горизонтальных полос, в основном в нижней половине изображения. Это код, который создает MinibatchSource: return MinibatchSource(ImageDeserializer(map_file, StreamDefs( features = StreamDef(field='image', transforms=transforms), labels = StreamDef(field='label', shape=10))) преобразовывает: ImageDeserializer.scale(width=28, height=28, channels=1, interpolations='linear') - person David Ruiz; 24.02.2017
comment
Вот почему модель не работает. Есть ли какой-то особый способ загрузки 1-канальных файлов PNG? Есть ли у вас другие предложения? - person David Ruiz; 24.02.2017
comment
Мы полагаемся на opencv для загрузки изображений. Если opencv не может правильно обрабатывать формат изображения, у вас есть два варианта: а) преобразовать изображение в другой формат (у нас были сообщения о том, что opencv неправильно обрабатывает 16-битные каналы, возможно, вы можете преобразовать свое изображение в 8-битное, если оно 16-битное) б) загрузить изображение другим способом, например. с PIL и подавать вручную (т.е. без считывателя). Если вы используете предварительно обученную сеть, см. подробности на этой вики-странице: github.com/Microsoft/CNTK/wiki/ - person Nikos Karampatziakis; 25.02.2017
comment
Хорошо, я посмотрю, имеет ли это какое-то отношение к 16-битным каналам. Я только что создал репозиторий github с: примерами двух графиков чтения изображений, кодом, используемым для преобразования файлов MNIST в PNG, и некоторыми примерами цифр MNIST в формате PNG: [github.com/davidarh/cntk_images_png](ссылка) - person David Ruiz; 27.02.2017
comment
Спасибо, Дэвид, файлы на самом деле 32-битные, можете попробовать следующее: w = png.Writer(cols, rows, greyscale=True, bitdepth=8) - person Emad Barsoum; 01.03.2017