2016-07-24 2 views
1

Для программы регрессии softmax с использованием tenorflow в python я хочу получить файлы изображений с 1000 jpeg в виде тензора 2D x: [индекс изображения, индекс пикселя]. «Индекс изображения» - это изображение, а индекс пикселя - определенный пиксель изображения для этого изображения. Уравнения модели:Получите несколько файлов изображений в виде 2D-тензора в тензорном потоке

y = tf.nn.softmax(tf.matmul(x, W) + b) 
where: 
x = tf.placeholder(tf.float32, [None, image_size]) 
W = tf.Variable(tf.zeros([image_size, classes])) 
b = tf.Variable(tf.zeros([classes])) 

размера = высота * ширина изображения (постоянная для всех изображений).

Каков наилучший способ в тензорном потоке получить файлы изображений в этой форме?

ответ

1

Когда я занимаюсь обработкой изображений, мне нравится использовать OpenCV (cv2.imread (...)) или Scipy (scipy.ndimage.imread (...)) для чтения файлов изображений. Я также думаю, что у shadoworflow может быть свой собственный считыватель изображений, который вы можете использовать. Эти две функции возвращают изображение в виде массива numpy. Вы можете указать в аргументах, если хотите оттенки серого или цвета. Теперь вам нужно предварительно обработать изображения. Вам может потребоваться преобразовать тип данных (OpenCV использует 8-битные целые числа, а не float32) и нормализует данные. Вы также можете изменить размер в этот момент, если изображения не имеют одинакового размера.

Вы можете сгладить эти массивы numpy, чтобы получить плоское изображение. Просто вызовите функцию flatten() для np.ndarray. После того, как вы загрузили и сгладили изображения, которые вы хотите для своей партии, соедините их вместе в массиве numpy np.array([img1, img2, ..., imgN]), и этот массив будет иметь форму [изображения, пиксели]. Затем вы можете передать это вам x placeholder.

0

Я предпочел бы предобработки каждые изображения, если это для обучения, но и для использования Tensorflow на линии с потоком живого изображения, я хотел бы попробовать следующий метод, который динамически изменяет данные в памяти:

any_shape = [the most natural shape according to the data you already have...] 
x_unshaped = tf.placeholder(tf.float32, any_shape) 
x = tf.reshape(x_unshaped, [-1, image_size]) 

Если данные уже правильно заказать в памяти, можно попробовать tf.Tensor.set_shape():

метод

tf.Tensor.set_shape() обновляет статическую форму объекта Тензор , и он, как правило, используется для обеспечения дополнительной форма информации, если это невозможно сделать непосредственно. Он не меняет динамическую форму тензора.

Источник: https://www.tensorflow.org/versions/r0.9/api_docs/python/framework.html

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