2017-03-28 23 views
2

我已經從網上下載了許多面部圖像。爲了學習Tensorflow,我想將這些圖像提供給一個帶有單個隱藏層的簡單全連接神經網絡。我在here中找到了一個示例代碼。神經網絡與我自己的數據集

由於我是初學者,我不知道如何使用下載的圖像來訓練,評估和測試網絡。代碼所有者使用'.mat'文件和.pkl文件。我不明白他是如何組織訓練和測試的。

爲了用我的圖像運行代碼; 我是否需要將我的圖像分成訓練,測試和驗證文件夾,並將每個文件夾轉換爲mat文件?我將如何爲培訓提供標籤?

此外,我不明白他爲什麼使用'.pkl'文件?總而言之,我想更改此代碼,以便我可以使用我的圖像數據集查找測試,訓練和驗證集分類性能。

這可能是一個簡單的問題,但它對我來說很重要,因爲它是一個開始步驟。感謝你的理解。

回答

1

首先,您不必使用.mat文件或泡菜。 Tensorflow期望numpy array

例如,假設您有70000張尺寸爲28x28(= 784尺寸)的圖像屬於10個類別。我們還假設你想訓練一個簡單的前饋神經網絡來分類圖像。

第一步將分割圖像之間的訓練和測試(和驗證,但讓我們把它放在一邊,爲簡單起見)。爲了舉例,讓我們假設您爲您的訓練集選擇了隨機 60000圖像,並且爲您的測試集選擇了10000。

第二步將確保您的數據具有正確的格式。在這裏,你希望你的訓練集包含一個形狀爲(60000, 784)的形狀的陣列,另一個形狀爲(60000, 10)(如果你使用單熱編碼來表示你的類)。至於你的測試集,你應該有一個形狀(10000, 784)的圖像陣列和形狀(10000, 10)的標籤之一。

一旦你有了這些大的numpy數組,你應該定義placeholders,這將允許你在訓練和評估期間向你的網絡提供數據。

images = tf.placeholder(tf.float32, shape=[None, 784]) 
labels = tf.placeholder(tf.int64, shape=[None, 10]) 

這裏的None意味着可以喂批處理任何尺寸的,即作爲許多圖像,你想要的,只要你numpy的陣列形狀(anything, 784)的。

第三步包括定義您的模型以及損失函數和優化器。

第四步包括訓練您的網絡,使用上面創建的佔位符隨機批處理數據。隨着您的網絡正在接受培訓,您可以定期打印其性能,如訓練損失/準確度以及測試損失/準確性。

你可以找到一個完整的,非常簡單的例子here

+0

感謝您的回答@BiBi。你的回答非常明確,但我不明白一件事。我如何標記訓練圖像?一個接一個還是其他方式?你有什麼簡單的例子/解釋標籤? –

+0

獲取標籤是最枯燥的任務之一。在MNIST示例中,標籤是手動獲取的,現在可供任何人免費下載。如果您使用公開可用的數據集,則最有可能具有標籤。但是,如果您創建自己的數據集(例如您自己的圖像),則需要手動獲取標籤(假設您想進行監督式學習)。 – BiBi