2016-04-26 1 views
0

Моя задача - классифицировать изображение в пикселях ... так что каждый пиксель изображения имеет класс, а CNN должен иметь возможность считывать изображение метки, чтобы каждый пиксель имел дискретное значение класса (0-19).Как считывать Tensorflow CNN в целые числа после слоя softmax?

У меня есть CNN, который, кажется, отлично справляется с воспроизведением относительных значений, так что он приближается к изображению метки с диапазоном 0.00001 и 0.00002 ... Однако у меня возникает проблема с получением кросс-энтропии работать вне только «вид хорошо», так как она опирается на матрицу этикетки изображения с дискретными значениями:

[[0, 1, 1, 1],[1,1,3,3],.etc] # A 2x4 pixel example 

Кроме того, я не думаю, что я могу рассчитывать на onehot векторов, так как я смотрел бы на матрица 19 * 227 * 227 ... но, возможно, я попробую, если здесь нет решения.

Как бы то ни было, как мне сделать этот целочисленный бокс по возвращаемым значениям в softmax? Должен ли я делать 1-точечный вектор для каждого пикселя в изображении, или можно ли другим способом изменить распределение softmax на целые классы?

ответ

2

Я понимаю, что этот ответ немного запоздал, но, надеюсь, это будет полезно. Вам не нужно создавать горячие векторы; вы можете использовать tf.nn.sparse_softmax_cross_entropy_with_logits.

labels: Each entry labels[i] must be an index in [0, num_classes) or -1. If -1, the corresponding loss will be 0, regardless of the contents of logits[i].

Смотрите ссылку ниже для документации и по ссылке ниже, что для примера он используется в учебнике CIFAR-10 сети. https://www.tensorflow.org/versions/r0.8/api_docs/python/nn.html#sparse_softmax_cross_entropy_with_logits https://github.com/tensorflow/tensorflow/blob/master/tensorflow/models/image/cifar10/cifar10.py

Надеюсь, это поможет!

Смежные вопросы