Tensorflow учебник по MNIST - PullRequest
       25

Tensorflow учебник по MNIST

0 голосов
/ 27 мая 2018

Это руководство Tensorflow загружает в код уже существующий набор данных (MNIST).Вместо этого я хочу вставить свои собственные тренировочные и тестовые изображения.

def main(unused_argv):
# Load training and eval data
mnist = tf.contrib.learn.datasets.load_dataset("mnist")
train_data = mnist.train.images # Returns np.array      
train_labels = np.asarray(mnist.train.labels, dtype=np.int32)
eval_data = mnist.test.images # Returns np.array
eval_labels = np.asarray(mnist.test.labels, dtype=np.int32)

Он говорит, что возвращает массив np необработанных значений пикселей.

Мой вопрос:

1.Как мне создать такой массив NumPy для моего собственного набора изображений? Я хочу сделать это, чтобы я мог напрямую подставлять мой NUMPY массив вместо этих данных MNIST в пример кода и обучать модель своим данным (0-9и AZ).

РЕДАКТИРОВАТЬ: При дальнейшем анализе я понял, что значения пикселей в mnist.train.images и mnist.test.images были нормализованы в диапазоне от 0 до 1 от 0 до 255 (я полагаю) Какэто нормализация помогает?

Структура папки: папка обучения и тестирования находится в одной папке

Training folder:
--> 0
    -->Image_Of_0.png
--> 1
    -->Image_Of_1.png
.
.
.
--> Z
    -->Image_Of_Z.png

Testing folder:
--> 0
    -->Image_Of_0.png
--> 1
    -->Image_Of_1.png
.
.
.
--> Z
    -->Image_Of_Z.png

Код, который я написал:

Names = [['C:\\Users\\xx\\Project\\training-images', 'train',9490], ['C:\\Users\\xx\\Project\\test-images', 'test',3175]]

#9490 is the number of training files in total (All the PNGs)
#3175 is the number of testing files in total (All the PNGs)
for name in Names:
FileList = []
for dirname in os.listdir(name[0]):
    path = os.path.join(name[0], dirname)
    for filename in os.listdir(path):
        if filename.endswith(".png"):
            FileList.append(os.path.join(name[0], dirname, filename))
print(FileList) 


## Creates list of all PNG files in training and testing folder

x_data = np.array([np.array(cv2.imread(filename)) for filename in FileList])
pixels = x_data.flatten().reshape(name[2], 2352)   #2352 = 28 * 28 * 3 image
print(pixels)

Может ли созданный массив пикселей предоставляться в качестве обученияи тестирование данных, т.е. будет ли он иметь тот же формат, что и данные, представленные в примере кода?

2.Точно так же, какой массив NumPy должен быть создан для всех меток?(Имена папок)

1 Ответ

0 голосов
/ 28 мая 2018

1.Как создать такой массив для моего собственного набора изображений?

TensorFlow принимает данные несколькими способами (tf.data, feed_dict, QueueRunner).То, что вы должны использовать, - это TFRecord, который доступен через API tf.data.Это также рекомендуемый формат .Допустим, у вас есть папка с изображениями, и вы хотите преобразовать ее в файл tfrecord.

import tensorflow as tf 
import numpy as np
import glob
from PIL import Image

# Converting the values into features
# _int64 is used for numeric values

def _int64_feature(value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))

# _bytes is used for string/char values

def _bytes_feature(value):
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
tfrecord_filename = 'something.tfrecords'

# Initiating the writer and creating the tfrecords file.

writer = tf.python_io.TFRecordWriter(tfrecord_filename)

# Loading the location of all files - image dataset
# Considering our image dataset has apple or orange
# The images are named as apple01.jpg, apple02.jpg .. , orange01.jpg .. etc.

images = glob.glob('data/*.jpg')
for image in images[:1]:
  img = Image.open(image)
  img = np.array(img.resize((32,32)))
label = 0 if 'apple' in image else 1
feature = { 'label': _int64_feature(label),
              'image': _bytes_feature(img.tostring()) }

#create an example protocol buffer
 example = tf.train.Example(features=tf.train.Features(feature=feature))

#writing the serialized example.
 writer.write(example.SerializeToString())
writer.close() 

Теперь, чтобы прочитать этот файл tfrecord и сделать что-то

import tensorflow as tf 
import glob
reader = tf.TFRecordReader()
filenames = glob.glob('*.tfrecords')
filename_queue = tf.train.string_input_producer(
   filenames)
_, serialized_example = reader.read(filename_queue)
feature_set = { 'image': tf.FixedLenFeature([], tf.string),
               'label': tf.FixedLenFeature([], tf.int64)
           }

features = tf.parse_single_example( serialized_example, features= feature_set )
label = features['label']

with tf.Session() as sess:
  print sess.run([image,label]) 

Вот пример для MNIST в тензор потока / примеры

Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...