簡單範例 - 判斷圖片是否為貓 - part1

整個機器學習的流程就是
Step1: 產生X, Y矩陣,稱為Feature, Label矩陣
Step2: 學習模型
Step3: 驗證模型

以下我們將以「教機器學會判斷圖片是否為貓」為例

Feature(X), Label(Y)矩陣

第一步,必須有很多貓的圖片(X),並且逐一標示是否為貓(Y)
這個步驟因為是已經知道input(貓的圖片)/output(是否為貓)
所以也稱為監督式學習(Supervised Learning)

Feature: X = [x1, x2, ...]
Label: Y = [y1, y2, ...]

X比較複雜
如果一張圖的維度是(30, 30),因為是彩色(RGB)的關係
所以矩陣為(30, 30, 3)
現有n張圖,所以X陣列維度為(n, 30, 30, 3)

Y相對較簡單
Y的維度就是 (n, 1), 由true,false(或1,0)組成

以下sample code

import tensorflow as tf
import numpy as np

def load_image_features(img_paths=[]):
    # -----------------------------------------------------
    # Define tensorflow model
    # https://gist.github.com/eerwitt/518b0c9564e500b4b50f
    # -----------------------------------------------------
    # 定義 graph (tensor 和 flow)
    filename_queue = tf.train.string_input_producer(img_paths, shuffle=False)
    image_reader = tf.WholeFileReader()
    file_name, file_content = image_reader.read(filename_queue)
    decoded_image = tf.image.decode_png(file_content, channels=3)
    resized_image = tf.image.resize_images(decoded_image, [30, 30])

    final_image_ary = []
    # 執行 graph
    with tf.Session() as sess:
        # 執行tensorflow時要先初始化(初學者照抄即可!)
        init = tf.global_variables_initializer()
        sess.run(init)
        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(coord=coord) # 建立多執行緒

        # image to RGB
        for i in range(len(img_paths)):
            img = sess.run(resized_image)
            final_image_ary.append(img)

        # 將最後的陣列轉換為 numpy 格式的陣列,以便存檔
        final_image_ary = np.array(final_image_ary, dtype=np.uint8)
        # 存檔
        final_image_ary.tofile("./your/image/training/array.features")

        # 停止多執行緒(初學者照抄前可!)
        coord.request_stop()
        coord.join(threads)

    return final_image_array

在Hello Tensorflow章節已經有提到撰寫的架構,本例依然遵守這個架構

第一步,定義graph
with tf.Session() as sess 前,先定義要做什麼
本例即使用tensorflow內建的image reader先「讀圖(.decode_png)」
為了減少運算量,我們還可以「縮圖(.resize_images)」
最後得到resized_image這個變數,tensorflow稱之為graph

第二步,執行graph
因為有很多張圖,所以用一個for迴圈跑
每次跑的內容就是先前定義好的graph
這裡我們將最後的結果append到final_image_ary裡

第三步,存檔 圖片讀取之後可能需要存檔
Python的Numpy套件提供了簡易的方法: .tofile(path)
但必須先將final_image_ary轉成numpy的格式後,再存檔,即

final_image_ary = np.array(final_image_ary, dtype=np.uint8)
final_image_ary.tofile("./your/image/training/array.features")

results matching ""

    No results matching ""