小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

從TensorFlow的mnist數(shù)據(jù)集導(dǎo)出手寫體數(shù)字圖片

 印度阿三17 2019-09-03

在TensorFlow的官方入門課程中,多次用到mnist數(shù)據(jù)集。

mnist數(shù)據(jù)集是一個(gè)數(shù)字手寫體圖片庫,但它的存儲格式并非常見的圖片格式,所有的圖片都集中保存在四個(gè)擴(kuò)展名為idx3-ubyte的二進(jìn)制文件。

如果我們想要知道大名鼎鼎的mnist手寫體數(shù)字都長什么樣子,就需要從mnist數(shù)據(jù)集中導(dǎo)出手寫體數(shù)字圖片。了解這些手寫體的總體形狀,也有助于加深我們對TensorFlow入門課程的理解。

下面先給出通過TensorFlow api接口導(dǎo)出mnist手寫體數(shù)字圖片的python代碼,再對代碼進(jìn)行分析。代碼在win7下測試通過,linux環(huán)境也可以參考本處代碼。

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import os
from PIL import Image

# 聲明圖片寬高
rows = 28
cols = 28

# 要提取的圖片數(shù)量
images_to_extract = 8000

# 當(dāng)前路徑下的保存目錄
save_dir = "./mnist_digits_images"

# 讀入mnist數(shù)據(jù)
mnist = input_data.read_data_sets("C:\\Users\\Administrator\\Desktop\\Tensorflow\\數(shù)據(jù)集\\mnist\\", one_hot=False)

# 創(chuàng)建會話
sess = tf.Session()

# 獲取圖片總數(shù)
shape = sess.run(tf.shape(mnist.train.images))
images_count = shape[0]
pixels_per_image = shape[1]

# 獲取標(biāo)簽總數(shù)
shape = sess.run(tf.shape(mnist.train.labels))
labels_count = shape[0]

# mnist.train.labels是一個(gè)二維張量,為便于后續(xù)生成數(shù)字圖片目錄名,有必要一維化(后來發(fā)現(xiàn)只要把數(shù)據(jù)集的one_hot屬性設(shè)為False,mnist.train.labels本身就是一維)
# labels = sess.run(tf.argmax(mnist.train.labels, 1))
labels = mnist.train.labels

# 檢查數(shù)據(jù)集是否符合預(yù)期格式
if (images_count == labels_count) and (shape.size == 1):
    print("數(shù)據(jù)集總共包含 %s 張圖片,和 %s 個(gè)標(biāo)簽" % (images_count, labels_count))
    print("每張圖片包含 %s 個(gè)像素" % (pixels_per_image))
    print("數(shù)據(jù)類型:%s" % (mnist.train.images.dtype))

    # mnist圖像數(shù)據(jù)的數(shù)值范圍是[0,1],需要擴(kuò)展到[0,255],以便于人眼觀看
    if mnist.train.images.dtype == "float32":
        print("準(zhǔn)備將數(shù)據(jù)類型從[0,1]轉(zhuǎn)為binary[0,255]...")
        for i in range(0, images_to_extract):
            for n in range(pixels_per_image):
                if mnist.train.images[i][n] != 0:
                    mnist.train.images[i][n] = 255
            # 由于數(shù)據(jù)集圖片數(shù)量龐大,轉(zhuǎn)換可能要花不少時(shí)間,有必要打印轉(zhuǎn)換進(jìn)度
            if ((i   1) % 50) == 0:
                print("圖像浮點(diǎn)數(shù)值擴(kuò)展進(jìn)度:已轉(zhuǎn)換 %s 張,共需轉(zhuǎn)換 %s 張" % (i   1, images_to_extract))

    # 創(chuàng)建數(shù)字圖片的保存目錄
    for i in range(10):
        dir = "%s/%s/" % (save_dir, i)
        if not os.path.exists(dir):
            print("目錄 ""%s"" 不存在!自動創(chuàng)建該目錄..." % dir)
            os.makedirs(dir)

    # 通過python圖片處理庫,生成圖片
    indices = [0 for x in range(0, 10)]
    for i in range(0, images_to_extract):
        img = Image.new("L", (cols, rows))
        for m in range(rows):
            for n in range(cols):
                img.putpixel((n, m), int(mnist.train.images[i][n   m * cols]))
        # 根據(jù)圖片所代表的數(shù)字label生成對應(yīng)的保存路徑
        digit = labels[i]
        path = "%s/%s/%s.bmp" % (save_dir, labels[i], indices[digit])
        indices[digit]  = 1
        img.save(path)
        # 由于數(shù)據(jù)集圖片數(shù)量龐大,保存過程可能要花不少時(shí)間,有必要打印保存進(jìn)度
        if ((i   1) % 50) == 0:
            print("圖片保存進(jìn)度:已保存 %s 張,共需保存 %s 張" % (i   1, images_to_extract))
else:
    print("圖片數(shù)量和標(biāo)簽數(shù)量不一致!")

上述代碼的實(shí)現(xiàn)思路如下:

1.讀入mnist手寫體數(shù)據(jù);

2.把數(shù)據(jù)的值從[0,1]浮點(diǎn)范圍轉(zhuǎn)化為黑白格式(背景為0-黑色,前景為255-白色);

3.根據(jù)mnist.train.labels的內(nèi)容,生成數(shù)字索引,也就是建立每一張圖片和其所代表數(shù)字的關(guān)聯(lián),由此創(chuàng)建對應(yīng)的保存目錄;

4.循環(huán)遍歷mnist.train.images,把每張圖片的像素?cái)?shù)據(jù)賦值給python圖片處理庫PIL的Image類實(shí)例,再調(diào)用Image類的save方法把圖片保存在第3步驟中創(chuàng)建的對應(yīng)目錄。

來源:https://www./content-4-438401.html

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多