吳裕雄 python 神經網絡——TensorFlow 數據集基本使用方法

import tempfile
import tensorflow as tf

input_data = [1, 2, 3, 5, 8]
dataset = tf.data.Dataset.from_tensor_slices(input_data)

# 定義迭代器。
iterator = dataset.make_one_shot_iterator()

# get_next() 返回表明一個輸入數據的張量。
x = iterator.get_next()
y = x * x

with tf.Session() as sess:
    for i in range(len(input_data)):
        print(sess.run(y))

# 建立文本文件做爲本例的輸入。
with open("E:\\temp\\test1.txt", "w") as file:
    file.write("File1, line1.\n") 
    file.write("File1, line2.\n")
with open("E:\\temp\\test2.txt", "w") as file:
    file.write("File2, line1.\n") 
    file.write("File2, line2.\n")

# 從文本文件建立數據集。這裏能夠提供多個文件。
input_files = ["E:\\temp\\test1.txt", "E:\\temp\\test2.txt"]
dataset = tf.data.TextLineDataset(input_files)

# 定義迭代器。
iterator = dataset.make_one_shot_iterator()

# 這裏get_next()返回一個字符串類型的張量,表明文件中的一行。
x = iterator.get_next()  
with tf.Session() as sess:
    for i in range(4):
        print(sess.run(x))

# 解析一個TFRecord的方法。
def parser(record):
    features = tf.parse_single_example(
        record,
        features={
            'image_raw':tf.FixedLenFeature([],tf.string),
            'pixels':tf.FixedLenFeature([],tf.int64),
            'label':tf.FixedLenFeature([],tf.int64)
        })
    decoded_images = tf.decode_raw(features['image_raw'],tf.uint8)
    retyped_images = tf.cast(decoded_images, tf.float32)
    images = tf.reshape(retyped_images, [784])
    labels = tf.cast(features['label'],tf.int32)
    #pixels = tf.cast(features['pixels'],tf.int32)
    return images, labels

# 從TFRecord文件建立數據集。這裏能夠提供多個文件。
input_files = ["E:\\MNIST_data\\output.tfrecords"]
dataset = tf.data.TFRecordDataset(input_files)

# map()函數表示對數據集中的每一條數據進行調用解析方法。
dataset = dataset.map(parser)

# 定義遍歷數據集的迭代器。
iterator = dataset.make_one_shot_iterator()

# 讀取數據,可用於進一步計算
image, label = iterator.get_next()

with tf.Session() as sess:
    for i in range(10):
        x, y = sess.run([image, label]) 
        print(y)

# 從TFRecord文件建立數據集,具體文件路徑是一個placeholder,稍後再提供具體路徑。
input_files = tf.placeholder(tf.string)
dataset = tf.data.TFRecordDataset(input_files)
dataset = dataset.map(parser)

# 定義遍歷dataset的initializable_iterator。
iterator = dataset.make_initializable_iterator()
image, label = iterator.get_next()

with tf.Session() as sess:
    # 首先初始化iterator,並給出input_files的值。
    sess.run(iterator.initializer,feed_dict={input_files: ["E:\\MNIST_data\\output.tfrecords"]})
    # 遍歷全部數據一個epoch。當遍歷結束時,程序會拋出OutOfRangeError。
    while True:
        try:
            x, y = sess.run([image, label])
        except tf.errors.OutOfRangeError:
            break 
相關文章
相關標籤/搜索