iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 22
0
AI & Machine Learning

tensorflow python系列 第 22

DAY22 使用CNN增加手寫數字辨識準確度(1)

前言:

我們今天就先從建立CNN模型開始進行手寫數字辨識。

程式開始:

(1)準備

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.pyplot as plt
import numpy as np
from time import time
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

說明:

這個部份是進行一些以後會用到的函式以及資料的匯入。

(2)建立共用函數

def weight(shape):
    return tf.Variable(tf.truncated_normal(shape , stddev=0.1),name = 'W')
def bias(shape):
    return tf.Variable(tf.constant(0.1,shape=shape),name='b')
def conv2d(x,W):
    return tf.nn.conv2d(x,W,strides=[1,1,1,1], padding='SAME')
def max_pool_2x2(x):
    return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

說明:

weight:建立權重的張量。

bias:建立偏差的張量。

conv2d:其效果類似於濾鏡的效果,用於卷積運算。

max_pool_2x2:進行影像的縮減,用於建立池化層。

(3)建立模型

with tf.name_scope('Input_Layer'):
    x=tf.placeholder("float",[None , 784],name='x')
    x_image = tf.reshape(x,[-1,28,28,1])

with tf.name_scope('C1_Conv'):
    W1=weight([5,5,1,16])
    b1=bias([16])
    Conv1=conv2d(x_image,W1)+b1
    C1_Conv = tf.nn.relu(Conv1)
with tf.name_scope('C1_pool'):
    C1_pool=max_pool_2x2(C1_Conv)

with tf.name_scope('C2_Conv'):
    W2=weight([5,5,16,36])
    b2=bias([36])
    Conv2=conv2d(C1_pool,W2)+b2
    C2_Conv = tf.nn.relu(Conv2)
with tf.name_scope('C2_pool'):
    C2_pool=max_pool_2x2(C2_Conv)

with tf.name_scope('D_Flat'):
    D_Flat = tf.reshape(C2_pool,[-1,1764])

with tf.name_scope('hidden'):
    W3=weight([1764,128])
    b3=bias([128])
    hidden=tf.nn.relu(tf.matmul(D_Flat,W3)+b3)
    dropout=tf.nn.dropout(hidden,keep_prob=0.8)

with tf.name_scope('OUTPUT'):
    W4=weight([128,10])
    b4=bias([10])
    y=tf.nn.softmax(tf.matmul(dropout,W4)+b4)

說明:

'Input_Layer':建立輸入層。

'C1_Conv':建立卷積層1。

->W1=weight(a,b,c,d) a,b=>濾鏡的大小為a x b c=>影像顏色 單色1 彩色3 d=>卷積運算後會產生的影像數量

->b1=偏差值

->Conv1=運算公式

->C1_Conv = 激勵函數

'C1_pool':建立池化層1。

->進行影像的縮減

'C2_Conv':建立卷積層2。

->W2=weight(a,b,c,d) a,b=>濾鏡的大小為a x b c=>影像顏色 單色1 彩色3 d=>卷積運算後會產生的影像數量

->b2=偏差值

->Conv2=運算公式

->C2_Conv = 激勵函數

'C2_pool':建立池化層2。

->進行影像的縮減

'D_Flat':建立全連接層。

->進行影像的攤平

'hidden':建立隱藏層。

'OUTPUT':建立輸出層。

結語:

到了這邊,CNN的模型已經建立好了,接下來就是等待下一章的開始訓練了。


上一篇
DAY21 CNN概念
下一篇
DAY23 使用CNN增加手寫數字辨識準確度(2)
系列文
tensorflow python30

尚未有邦友留言

立即登入留言