深度學習tensorflow之手勢識別程式改造

2021-10-21 02:29:54 字數 4480 閱讀 5004

拿到基礎程式後。基本可以試一下效果了。不過效果會很差。也就是結構準確一點點罷了。

n_classes = 10  # 5種手勢

img_w = 227 # resize影象,太大的話訓練時間久

img_h = 227

batch_size = 64 # 由於資料集較小,所以選值較大 一次訓練512張已經是該電腦的極限了

capacity = 320

max_step = 10000

learning_rate = 0.0001 # 一般小於0.0001

手勢的個數。目前我用的手勢個數是10個。

一共用了10種手勢。其他的不展示了。如果你使用開源的手勢資料集的話,只有750張。對於卷積神經網路來說,資料是遠遠不夠的。

我來給你乙個參考資料。對於像 alexnet 這種網路,6000萬的參數量的話。需要至少10萬張訓練資料。每個樣本至少1000張。當然了。你感覺資料好像有點太多了是吧。你可以某種程度上吧網路結構減少,用影象增強的方式來增加影象,你也可以增加影象的分類,用官方的公開的資料集來增加訓練影象的數量。哈哈。說的好輕巧。就影象這一項夠你幾周處理的了。當然,這也是目前深度學習神經網路的巨大弊端之一。當然目前已經有些方法了,比如預訓練模型等。

資料不夠,不能過擬合啊。改造一下模型。

# 第三層為全連線層local3

with tf.variable_scope('local3') as scope:

# flatten-把卷積過的多維tensor拉平成二維張量(矩陣)

reshape = tf.reshape(pooling, shape=[batch_size, -1]) # batch_size表明了有多少個樣本

dim = reshape.get_shape()[1].value # 知道-1(代表任意)這裡具體是多少個

weights = tf.get_variable('weights',

shape=[dim, 1024], # 連線1024個神經元

dtype=tf.float32,

initializer=tf.truncated_normal_initializer(stddev=0.005, dtype=tf.float32))

biases = tf.get_variable('biases',

shape=[1024],

dtype=tf.float32,

initializer=tf.constant_initializer(0.1))

local3 = tf.nn.relu(tf.matmul(reshape, weights) + biases, name=scope.name) # 矩陣相乘加上bias

local3 = tf.nn.dropout(local3, keep_prob) # 設定神經元被選中的概率

# 第四層為全連線層local4

with tf.variable_scope('local4') as scope:

weights = tf.get_variable('weights',

shape=[1024, 1024], # 再連線1024個神經元

dtype=tf.float32,

initializer=tf.truncated_normal_initializer(stddev=0.005, dtype=tf.float32))

biases = tf.get_variable('biases',

shape=[1024],

dtype=tf.float32,

initializer=tf.constant_initializer(0.1))

local4 = tf.nn.relu(tf.matmul(local3, weights) + biases, name='local4')

local4 = tf.nn.dropout(local4, keep_prob)

全連線層,占用了絕大多數的引數。沒辦法。減少引數就把模型改小。1024個神經元,改小成256個。

with tf.variable_scope('conv1') as scope:

# 建立weights和biases的共享變數

# conv1, shape = [kernel size, kernel size, channels, kernel numbers]

weights = tf.get_variable('weights',

shape=[11, 11, 3, 96],

dtype=tf.float32,

initializer=tf.truncated_normal_initializer(stddev=0.1,dtype=tf.float32)) # stddev標準差

biases = tf.get_variable('biases',

shape=[96],

dtype=tf.float32,

initializer=tf.constant_initializer(0.1))

# 卷積層 strides = [1, x_movement, y_movement, 1], padding填充周圍有valid和same可選擇

conv = tf.nn.conv2d(images, weights, strides=[1, 4, 4, 1], padding='same')

pre_activation = tf.nn.bias_add(conv, biases) # 加入偏差

conv1 = tf.nn.relu(pre_activation, name=scope.name) # 加上啟用函式非線性化處理,且是在conv1的命名空間

# 第一層的池化層pool1和規範化norm1(特徵縮放)

with tf.variable_scope('pooling1_lrn') as scope:

pool1 = tf.nn.max_pool(conv1, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1],

padding='valid', name='pooling1')

norm1 = tf.nn.lrn(pool1, depth_radius=4, bias=1.0, alpha=0.001/9.0,

beta=0.75,name='norm1')

# ksize是池化視窗的大小=[1,height,width,1],一般height=width=池化視窗的步長

# 池化視窗的步長一般是比卷積核多移動一位

# tf.nn.lrn是local response normalization,(區域性響應歸一化)

# 第二層的卷積層cov2,這裡的命名空間和第一層不一樣,所以可以和第一層取同名

with tf.variable_scope('conv2') as scope:

weights = tf.get_variable('weights',

shape=[5, 5, 96, 256], # 這裡只有第三位數字96需要等於上一層的tensor維度

dtype=tf.float32,

initializer=tf.truncated_normal_initializer(stddev=0.1,dtype=tf.float32))

biases = tf.get_variable('biases',

shape=[256],

dtype=tf.float32,

initializer=tf.constant_initializer(0.1))

conv = tf.nn.conv2d(norm1, weights, strides=[1, 1, 1, 1],padding='same')

pre_activation = tf.nn.bias_add(conv, biases)

conv2 = tf.nn.relu(pre_activation, name='conv2')

這裡占用絕大多數的計算量。可以考慮把的大小修改了。因為比賽的影象標準大小就是227x227.  resize一下把模型改小到180x180.也可以。

要不然,該小shape的數量。

神經網路的除錯方法嘛?知乎上:  。你也可以直接在知乎上搜尋, 神經網路調參技巧。 基本涵蓋了所有的方法。能達到什麼程度,看自己的修為了。

好了,說到這裡。努力調參,訓練吧。點到為止。

有興趣相關技術的人可以看個人介紹和我毛華望聯絡。 目前人在深圳寶安區。

深度學習 TensorFlow 入門之基本使用

使用 tensorflow,你必須明白 tensorflow 賦值或者從其中獲取資料.乙個 tensorflow 圖描述了計算的過程.為了進行計算,圖必須在 會話 裡被啟動.會話 將圖的 op 分發到諸如 cpu 或 gpu 之類的 裝置 上,同時提供執行 op 的方法.這些方法執行後,將產生的 t...

人人都會深度學習之Tensorflow基礎快速入門

tensorflow基礎快速入門 課程的目的是幫助廣大的深度學習愛好者,逐層深入,步步精通當下最流行的深度學習框架tensorflow。該課程包含tensorflow執行原理,tensor上面常見的操作,常見api的使用,公式推導,tensorboard,張量形狀變換,張量上的資料操作,算術操作,矩...

TensorFlow 深度學習筆記

google 深度學習筆記 經常總結是個好習慣,筆記目錄奉上。歡迎star,有問題可以到issue區討論 官方教程位址 最近tensorflow團隊出了乙個model專案,和這個課程無關,但是可以參考 框架 tensorflow 谷歌出品的基於python的深度學習工具集 工具 ipython,py...