1. 程式人生 > >tensorflow1.1/構建卷積神經網路人臉識別

tensorflow1.1/構建卷積神經網路人臉識別

環境:tensorflow1.1,python3,matplotlin2.02

olivettifaces是紐約大學的一個比較小的人臉庫,由40個人的400張圖片構成,即每個人的人臉圖片為10張。每張圖片的灰度級為8位,每個畫素的灰度大小位於0-255之間,每張圖片大小為64×64。圖片大小是1190*942,一共有20*20張人臉,故每張人臉大小是(1190/20)*(942/20)即57*47=2679本文所用的訓練資料就是這張圖片,400個樣本,40個類別。

#coding:utf-8
"""
python 3
tensorflow 1.1
matplotlib 2.02
"""
import tensorflow as
tf import pickle import numpy as np import matplotlib.pyplot as plt #讀取資料集 with open('facedataset.pickle','rb') as f: (train_data,train_labels),(test_data,test_labels) = pickle.load(f) tf.set_random_seed(100) np.random.seed(100) batch_size = 40 learning_rate = 0.01 #定義one_hot def label_to_one_hot(labels_dense, num_classes=10
)
:
num_labels = labels_dense.shape[0] index_offset = np.arange(num_labels) * num_classes labels_one_hot = np.zeros((num_labels, num_classes)) labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1 return labels_one_hot train_data = train_data.astype(np.float32) test_data = test_data.astype(np.float32) train_labels = label_to_one_hot(train_labels,num_classes=40
).astype(np.int32) test_labels = label_to_one_hot(test_labels,num_classes=40).astype(np.int32) #檢視圖片 plt.imshow(train_data[0].reshape((57,47))) plt.title('the face picture',fontdict={'size':16,'color':'c'}) plt.gray() plt.show() #定義輸入形狀 xs = tf.placeholder(tf.float32,[None,57*47]) ys = tf.placeholder(tf.int32,[None,40]) #構建神經網路 x = tf.reshape(xs,[-1,57,47,1]) conv1 = tf.layers.conv2d(inputs=x,filters=5,kernel_size=3,strides=1,padding='same',activation=tf.nn.relu) pool1 = tf.layers.max_pooling2d(conv1,pool_size=2,strides=2) conv2 = tf.layers.conv2d(inputs=pool1,filters=10,kernel_size=3,strides=1,padding='same',activation=tf.nn.relu) pool2 = tf.layers.max_pooling2d(conv2,pool_size=2,strides=2) flat = tf.reshape(pool2,[-1,14*11*10]) output = tf.layers.dense(flat,40) #計算loss loss = tf.losses.softmax_cross_entropy(onehot_labels=ys,logits=output) train = tf.train.AdamOptimizer(learning_rate).minimize(loss) _,accuracy = tf.metrics.accuracy(labels=tf.argmax(ys,axis=1),predictions=tf.argmax(output,axis=1)) with tf.Session() as sess: init = tf.group(tf.global_variables_initializer(),tf.local_variables_initializer()) sess.run(init) for i in range(10): _,c = sess.run([train,loss],feed_dict={xs:train_data,ys:train_labels}) print('= = = = = = > > > > > >loss: %.4f' %c) acc = sess.run(accuracy,feed_dict={xs:test_data,ys:test_labels}) print('accuracy is :%.4f' %acc)

由於資料集很小,在訓練的時候就沒有考慮採用batch訓練

結果:

這裡寫圖片描述

這裡寫圖片描述

訓練注意事項

在神經網路訓練的過程中,如果資料集沒有被打亂,原始資料集是有序的,會對檢測精度造成很大影響
上述實驗中在訓練集和label上設定相同的隨機種子,打亂順序後訓練,檢測精度顯著提高。
這裡寫圖片描述

這裡寫圖片描述

相關推薦

tensorflow1.1/構建神經網路人臉識別

環境:tensorflow1.1,python3,matplotlin2.02 olivettifaces是紐約大學的一個比較小的人臉庫,由40個人的400張圖片構成,即每個人的人臉圖片為10張。每張圖片的灰度級為8位,每個畫素的灰度大小位於0-255之間,每

神經網路--人臉識別神經風格遷移

卷積神經網路 — 特殊應用:人臉識別和神經風格遷移 人臉識別 人臉驗證(Verification): 1. Input:圖片、名字/ID; 2.Output:輸入的圖片是否是對應的人。 3.1 to 1 問題。     對於大多數的人臉識別系統都存在的一個問題就是

一步一步學用Tensorflow構建神經網路

摘要: 本文主要和大家分享如何使用Tensorflow從頭開始構建和訓練卷積神經網路。這樣就可以將這個知識作為一個構建塊來創造有趣的深度學習應用程式了。 0. 簡介 在過去,我寫的主要都是“傳統類”的機器學習文章,如樸素貝葉斯分類、邏輯迴歸和Perceptron演算法。在過去的

Coursera吳恩達《神經網路》課程筆記(1)-- 神經網路基礎

《Convolutional Neural Networks》是Andrw Ng深度學習專項課程中的第四門課。這門課主要介紹卷積神經網路(CNN)的基本概念、模型和具體應用。該門課共有4周課時,所以我將分成4次筆記來總結,這是第一節筆記。 1. Compu

人工智慧初學- 1.3 神經網路

卷積知識 卷積就是:一個函式(如:單位響應)在另一個函式(如:輸入訊號)上的加權疊加。 神經網路(NN) 下面這個是典型的神經網路三層模型:Layer L1是輸入層,Layer L2是隱含層,Layer L3是隱含層 參考下面的部落格可以詳細知道這個模型是

Tensorflow and CNNs 使用tensorflow構建神經網路

TensorFlow的layers模組提供了比較高階的API,使得我們能可以很方便的構建各種神經網路。它提供的方法可以方便的新增全連線層、卷積層、啟用函式以及dropout。在這個教程中,你將瞭解如何使用layers模組來構建用於識別MNIST資料集的卷

Deep Learning-TensorFlow (1) CNN神經網路_MNIST手寫數字識別程式碼實現詳解

import tensorflow as tf import tensorflow.examples.tutorials.mnist.input_data as input_data import time # 計算開始時間   start = time.clock()

如何用神經網路CNN識別手寫數字集BaseLine版本 超級小白註釋

如何用卷積神經網路CNN識別手寫數字集? 由於剛剛開始學習機器學習方面的知識,網上很多基礎的教程真的看不懂,所以只能自己一點點摸索,一篇很簡單的程式碼,可能我也要看很久QAQ,原博主的程式碼對於我來說可能還是很懵逼,因此自己加了很多註釋,希望可以幫到和我一樣的

基於cifar10實現神經網路影象識別

1 import tensorflow as tf 2 import numpy as np 3 import math 4 import time 5 import cifar10 6 import cifar10_input 7 """ 8 Create

神經網路CNN識別MNIST資料集

這次我們將建立一個卷積神經網路,它可以把MNIST手寫字元的識別準確率提升到99%,讀者可能需要一些卷積神經網路的基礎知識才能更好的理解本節的內容。 程式的開頭是匯入TensorFlow: import tensorflow as tf from tensorflow.examples.tutori

第4門課程-神經網路-第二週作業1-基於Keras的人臉表情分類

0- 背景: 從人臉影象中的表情判斷一個人是否快樂。本文將基於Keras實現該功能。Keras是一個更高階的API,其底層框架可以是TensorFlow或者CNTK。 1-資料載入: 匯入依賴的庫: import numpy as np #import

DeepLearning.ai作業:(4-1)-- 神經網路(Foundations of CNN)

title: ‘DeepLearning.ai作業:(4-1)-- 卷積神經網路(Foundations of CNN)’ id: dl-ai-4-1h tags: dl.ai homework categories: AI Deep Learning d

DeepLearning.ai筆記:(4-1)-- 神經網路(Foundations of CNN)

title: ‘DeepLearning.ai筆記:(4-1)-- 卷積神經網路(Foundations of CNN)’ id: dl-ai-4-1 tags: dl.ai categories: AI Deep Learning date: 2018-09-

【深度學習】Tensorflow——CNN 神經網路 1

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-04-CNN2/ 這一次我們會說道 CNN 程式碼中怎麼定義 Convolutional 的層和怎樣進行 pooling. 基於上一次卷積神經網路的介

機器學習與深度學習系列連載: 第二部分 深度學習(十)神經網路 1 Convolutional Neural Networks

卷積神經網路 Convolutional Neural Networks 卷積神經網路其實早在80年代,就被神經網路泰斗Lecun 提出[LeNet-5, LeCun 1980],但是由於當時的資料量、計算力等問題,沒有得到廣泛使用。 卷積神經網路的靈感來自50年代的諾貝爾生物學獎

實時神經網路實現人臉檢測和情感/性別分類

本文提出了一種通用的實現方法卷積神經網路(CNN)構建框架設計實時CNN。建立實時面部檢測視覺系統,實現性別分類和情緒分類。 其中:IMDB性別分類測試準確率:96%;fer2013情緒分類測試準確率:66%。 具體效果如下圖:  這裡提供下資料集下載: 1、情緒

神經網路, 識別人臉性別

原博地址https://laboo.top/2018/12/02/tfjs-face/#more 在傳統程式設計中, 影象識別一直是一個難點, 雖然人能輕鬆做到, 但是用邏輯來描述這個過程, 並轉換成程式是很難的。機器學習的出現讓影象識別技術有了突破性的進展, 卷積神經網路的出現, 又使影象識別更上了一次層

# [cs231n (九)神經網路 ][1]

標籤(空格分隔): 神經網路 0.回顧 cs231n (一)影象分類識別講了KNN cs231n (二)講了線性分類器:SVM和SoftMax cs231n (三)優化問題及方法 cs231n (四)反向傳播 cs231n (五)神經網路 part 1:

cs231n 神經網路與計算機視覺 1 基礎梳理與KNN影象分類

本導論主要介紹了影象分類問題及資料驅動方法。 影象分類問題 image classification 影象的分類問題簡單來說就是對選擇一個給定label的過程。如下圖: 此圖片為248×400畫素的圖片,對電腦來說他是一個248 x 400 x 3的3維陣列,其中的

使用神經網路進行圖片分類 1

卷積神經網路原理一、實驗介紹1.1 實驗內容本課程將會先帶你理解卷積神經網路的原理,瞭解卷積神經網路的一些特性。然後動手使用caffe深度學習框架訓練一個卷積神經網路模型,並用訓練好的模型進行圖片分類。學習本課程之前,請先學習課程814 使用python實現深度神經網路以瞭解必要的基本概念,本實驗中涉及到的深