Использует ли Tensorflow только одну горячую кодировку для хранения этикеток?

Я только начал работать с Tensorflow, с Caffe было очень практично читать данные эффективным способом, но с Tensorflow я вижу, что мне нужно самому писать процесс загрузки данных, создавать TFRecords, пакетирование, множественные угрозы, обрабатывать эти потоки и т. д. Итак, я начал с примера, inception v3, поскольку они обрабатывают часть данных для чтения. Я новичок в Tensorflow и относительно новичок в Python, поэтому мне кажется, что я не понимаю, что именно происходит с этой частью (я имею в виду, да, он увеличивает размер меток до label_index * no of files-но- почему? Создает ли он одну горячую кодировку для меток? Должны ли мы? Почему она просто не расширяется по длине или файлам, поскольку у каждого файла есть метка? Спасибо.

labels.extend([label_index] * len(filenames))
texts.extend([text] * len(filenames))
filenames.extend(filenames)

Весь код находится здесь: https://github.com/tensorflow/models/tree/master/research/inception

Упомянутая часть находится в data / build_image_data.py и строит набор данных изображений из существующего набора данных в виде изображений, хранящихся в папках (где имя папки - это метка): https://github.com/tensorflow/models/blob/master/research/inception/inception/data/build_image_data.py


person dusa    schedule 30.11.2017    source источник
comment
Вкратце, вам нужно выполнить одноразовое кодирование, потому что этого требует сетевая архитектура, а не потому, что этого требует Tensorflow. Сеть является классификатором N-класса, поэтому последний слой будет иметь по одному нейрону на класс, и вы научите сеть активировать нейрон, соответствующий классу, к которому принадлежит образец. Быстрое кодирование метки - первый шаг к этому.   -  person GPhilo    schedule 30.11.2017
comment
@GPhilo Хорошо, я вижу, спасибо. Но почему он также должен делать это с текстом (где текст - это метка класса на естественном языке? - например, собака, дом, кошка и т. Д.). Таким образом, он заполняет список, например: ['class1', 'class2' , 'class1', 'class2', 'class1', 'class2', 'class1', 'class2', 'class1', 'class2', 'class1', 'class2', 'class1', 'class2', ' class1 ',' class2 ',' class1 ',' class2 ',' class1 ',' class2 '] Почему это?   -  person dusa    schedule 30.11.2017
comment
Я не понимаю ваш комментарий, что в списке?   -  person GPhilo    schedule 30.11.2017
comment
В этой части: text.extend ([text] * len (filenames)) тексты - это метки классов на естественном языке, поэтому это список вроде ['cat', 'dog', 'house'], а метки - это числовые метки, которые перечисляют классы как фон: 0 cat: 1 dog: 2 house: 3, так что это скорее список вроде [0,1,2,3]. Итак, я понимаю, что в первой строке он увеличивает размер меток, чтобы пометить индекс * количество файлов, но зачем расширять текст, как в ['cat', 'dog', 'house'] * количество файлов?   -  person dusa    schedule 30.11.2017
comment
Если вы не покажете мне код, в котором используется texts, я не могу сказать вам, какой смысл в его расширении. Ссылка, которую вы даете, ведет в корень репозитория реализации Inception, который содержит десятки файлов ...   -  person GPhilo    schedule 30.11.2017
comment
Хорошо, вот оно: github.com / tenorflow / models / blob / master / research / inception /   -  person dusa    schedule 30.11.2017


Ответы (1)


Собирая воедино то, что мы обсуждали в комментариях:

Вы должны выполнять одноразовое кодирование, потому что этого требует сетевая архитектура, а не потому, что этого требует Tensorflow. Сеть является классификатором N-класса, поэтому последний слой будет иметь по одному нейрону на класс, и вы научите сеть активировать нейрон, соответствующий классу, к которому принадлежит образец. Быстрое кодирование метки - это первый шаг к этому.

Что касается удобочитаемых этикеток, то код, на который вы ссылаетесь, находится в _ 1_, которая, в свою очередь, используется _ 2_ для преобразования набора данных из набора папок в набор TfRecord файлов, которые являются удобный тип формата ввода для Tensorflow.

Строка меток, удобочитаемая человеком, включена как функция в Examples внутри файлов tfrecord как «дополнительная» (вероятно, для упрощения визуализации промежуточных результатов во время обучения), она не является строго необходимой для набора данных и не будет использоваться ни в каких путь в собственно оптимизации параметров сети.

person GPhilo    schedule 30.11.2017