2016-10-09 50 views
7

Tôi là người mới cho tensorflow và tôi bắt đầu với mã ví dụ MNIST chính thức để tìm hiểu logic của tensorflow. Tuy nhiên, một điều tôi cảm thấy không tốt là, ví dụ MNIST cung cấp tập dữ liệu gốc như một số tệp nén, định dạng của nó không rõ ràng cho người mới bắt đầu. Trường hợp này cũng đi với Cifar10 cung cấp tập dữ liệu dưới dạng tệp nhị phân. Tôi nghĩ trong nhiệm vụ học tập sâu sắc thực tế, tập dữ liệu của chúng tôi có thể có nhiều tệp hình ảnh, chẳng hạn như *.jpg hoặc *.png trong một thư mục và chúng tôi cũng có tệp văn bản ghi nhãn của từng tệp (như tập dữ liệu ImageNet). Hãy để tôi sử dụng MNIST làm ví dụ.Tải các tệp hình ảnh trong thư mục dưới dạng tập dữ liệu để đào tạo trong Tensorflow

MNIST chứa 50k hình ảnh đào tạo có kích thước 28 x 28. Bây giờ, hãy giả sử những hình ảnh này có định dạng jpg và được lưu trữ trong một thư mục ./dataset/. Trong ./dataset/, chúng ta có một tập tin văn bản label.txt lưu trữ các nhãn của mỗi hình ảnh:

/path/to/dataset/ 
       image00001.jpg 
       image00002.jpg 
       ... ... ... ... 
       image50000.jpg 
       label.txt 

nơi label.txt là như thế này:

#label.txt: 
image00001.jpg 1 
image00002.jpg 0 
image00003.jpg 4 
image00004.jpg 9 
... ... ... ... 
image50000.jpg 3 

Bây giờ tôi muốn sử dụng Tensorflow để đào tạo một mô hình lớp duy nhất với các tập dữ liệu này. Bất cứ ai có thể giúp đỡ để cung cấp cho một đoạn mã đơn giản để làm điều đó?

Trả lời

3

Về cơ bản có hai điều bạn cần. Đầu tiên là bình thường mã python như vậy:

import numpy as np 
from scipy import misC# feel free to use another image loader 

def create_batches(batch_size): 
    images = [] 
    for img in list_of_images: 
    images.append(misc.imread(img)) 
    images = np.asarray(images) 

    #do something similar for the labels 

    while (True): 
    for i in range(0,total,batch_size): 
     yield(images[i:i+batch_size],labels[i:i+batch_size]) 

bây giờ đến phần tensorflow

imgs = tf.placeholder(tf.float32,shape=[None,height,width,colors]) 
lbls = tf.placeholder(tf.int32, shape=[None,label_dimension]) 

with tf.Session() as sess: 
#define rest of graph here 
# convolutions or linear layers and cost function etc. 


    batch_generator = create_batches(batch_size) 
    for i in range(number_of_epochs): 
    images, labels = batch_generator.next() 
    loss_value = sess.run([loss], feed_dict={imgs:images, lbls:labels}) 
Các vấn đề liên quan