1. 程式人生 > >TensorFlow練習(六)——Classification分類學習

TensorFlow練習(六)——Classification分類學習

分類和迴歸的區別在於輸出變數的型別上。 通俗理解定量輸出是迴歸,或者說是連續變數預測; 定性輸出是分類,或者說是離散變數預測。如預測房價這是一個迴歸任務; 把東西分成幾類, 比如貓狗豬牛,就是一個分類任務。

首先準備資料(MNIST庫),MNIST庫是手寫體數字庫,差不多是這樣子的


資料中包含55000張訓練圖片,每張圖片的解析度是28×28,所以我們的訓練網路輸入應該是28×28=784個畫素資料。

import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.pyplot as plt

# number 1 to 10 data
mnist = input_data.read_data_sets('MNIST_data',one_hot=True)  # 如果沒有這個資料包會去網上幫你下載下來。

def add_layer(inputs,in_size,out_size,activation_function=None): # 輸入值,輸入的大小,輸出的大小,激勵函式
    Weights = tf.Variable(tf.random_normal([in_size,out_size]))  #定義矩陣 隨機變數生成初始的時候會比全0的好
    # 定義weights為一個in_size行, out_size列的隨機變數矩陣
    biases = tf.Variable(tf.zeros([1,out_size]) + 0.1)   # 推薦初始值不為0
    Wx_plus_b = tf.matmul(inputs,Weights) + biases
    # 當激勵函式為None時,輸出就是當前的預測值——Wx_plus_b
    # 不為None時,就把Wx_plus_b傳到activation_function()函式中得到輸出。
    if activation_function is None:   # 線性關係,就不需要再加非線性方程
        outputs = Wx_plus_b
    else:
        outputs = activation_function(Wx_plus_b)
    return outputs

def compute_accuracy(v_xs,v_ys):
    global prediction  # 定義全域性變數
    y_pre = sess.run(prediction, feed_dict={xs: v_xs})  # 用xs生成預測值  1行10列,介於0、1之間的數
    correct_prediction = tf.equal(tf.argmax(y_pre, 1), tf.argmax(v_ys, 1)) # 概率最大值的位置是不是等於真是資料中1的位置
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))  # 計算這組資料到底多少對的多少錯的
    result = sess.run(accuracy, feed_dict={xs: v_xs, ys: v_ys})
    return result   # 輸出百分比

xs = tf.placeholder(tf.float32,[None,784])  # 每一張圖片有784個畫素點
ys = tf.placeholder(tf.float32,[None,10])   # 有十個數字輸出

# 呼叫add_layer函式搭建一個最簡單的訓練網路結構,只有輸入層和輸出層。
prediction = add_layer(xs,784,10,activation_function=tf.nn.softmax) # softmax用來做分類
# 其中輸入資料是784個特徵,輸出資料是10個特徵,激勵採用softmax函式,網路結構圖是這樣子的

cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys*tf.log(prediction),
                     reduction_indices=[1])) # loss函式(即最優化目標函式)選用交叉熵函式。交叉熵用來衡量預測值和真實值的相似程度
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
    # train方法採用梯度下降法  優化器    目標,最小化誤差

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

for i in range(2000):
    batch_xs,batch_ys = mnist.train.next_batch(100)  # 現在開始train,從下載好的database每次只取100張圖片,免得資料太多訓練太慢。
    sess.run(train_step,feed_dict={xs:batch_xs,ys:batch_ys})
    if i % 50 ==0:
        print(compute_accuracy(mnist.test.images,mnist.test.labels))

plt.show()

神經網路結構圖:


執行結果:


相關推薦

TensorFlow練習——Classification分類學習

分類和迴歸的區別在於輸出變數的型別上。 通俗理解定量輸出是迴歸,或者說是連續變數預測; 定性輸出是分類,或者說是離散變數預測。如預測房價這是一個迴歸任務; 把東西分成幾類, 比如貓狗豬牛,就是一個分類任務。 首先準備資料(MNIST庫),MNIST庫是手寫體數字庫,差不多

慕課網/安卓攻城獅視頻學習練習

lba etl 居住 style 北京 click con notify absl manifest A跳轉B,在B的文件中用permission權限,然後A就無權跳轉到B,如果在A中用uses-permission把權限給了A,那麽A就可以跳轉到B了.可以通俗的說,

機器學習練習—— 支援向量機

這篇文章是一系列 Andrew Ng 在 Coursera 上的機器學習課程的練習的一部分。這篇文章的原始程式碼,練習文字,資料檔案可從這裡獲得。 我們現在已經到了課程內容和本系列部落格文章的最後階段。本

tensorflow訓練分類自己的圖片CNN超詳細入門版

之前一直用caffe做影象方面的東西,由於tensorflow環境配置簡單,綜合表現較為出色,因此打算轉戰tensorflow。學習這個框架,最開始還是要跑一跑文件中的mnist小程式(具體請參照tensorflow官方文件)。但是mnist中都是處理好的資料,

【轉】SVM入門線性分類器的求解——問題的轉化,直觀角度

content cli 樣本 image ges 五個 是你 角度 spa SVM入門(六)線性分類器的求解——問題的轉化,直觀角度 讓我再一次比較完整的重復一下我們要解決的問題:我們有屬於兩個類別的樣本點(並不限定這些點在二維空間中)若幹,如圖, 圓形的樣本點定為正樣

Python練習

素數 開關 Python練習(六)給一個數,判斷它是否是素數(質數): 除了1和它自身外,不能被小於它的正整數整除的就是素數。 簡化點就是:能整除,不是素數 不能整除,是素數可以參考另一篇《Python練習(三)》中有介紹如何計算出1-100之內的所有素數n

轉:TensorFlow入門 雙端 LSTM 實現序列標註分詞

vsm max poc 代碼 單詞 arch 大致 雙端 fun http://blog.csdn.net/Jerr__y/article/details/70471066 歡迎轉載,但請務必註明原文出處及作者信息。 @author: huangyongye @creat_

Shell練習

san 創建 練習 date pac strong 管道 orm 個數字 習題1:輸入數字執行對應命令要求:輸入一個數字,然後運行對應的一個命令。顯示命令如下:*cmd meau* 1—date 2–ls 3–who 4–pwd;當輸入1時,會運行date, 輸入2時運行

ProtoBuf練習

目錄 log json sbo 結構 style write opts AC JSON類型 工程目錄結構 $ ls proto/ proto文件 $ cat proto/style.proto syntax = "proto3"; import "google/proto

NodeJS簡易部落格系統NodeJS入門學習

一、網路程式設計 1、小試牛刀 NodeJS本來的用途是編寫高效能Web伺服器。首先在這裡重複一下官方文件裡的例子,使用NodeJS內建的http模組簡單實現一個HTTP伺服器。 var http = require('http'); http.createSe

面向物件【林老師版】:面向物件練習

一、編寫一個學生類,產生一堆學生物件 1、程式碼 class Student: school='luffycity' def __init__(self,name,age,sex): self.name=name self.age=age

JSP程式碼練習

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <

MySql必知必會實戰練習遊標

  遊標主要用於互動式應用,滾動螢幕上的資料,並對資料進行瀏覽或做出更改   看一下下面的例子: drop procedure IF EXISTS processorders; create procedure processorders( out ordernum int ) begin

js小練習:最近刷到的一些js筆試題

最近在各大網站刷到的一些js的筆試題,都是自己已經除錯測試過可行的程式碼。 整理非原創,只有核心註釋是我自己寫的,程式碼不是,僅作為筆記記錄下來。閱讀程式碼能力一般,如果出錯的話請諒解,也歡迎指正。 (一)輸入字串,複製num次輸出: function tim

mysql基礎---基礎最全面鞏固練習

--- 練習 -- CREATE TABLE student2(id INT,NAME VARCHAR(20),chinese FLOAT,english FLOAT,math FLOAT ); INSERT INTO student2(id,NAME,chinese,en

大學生學程式設計:如何學習C語言?

現在很多人初學者直接選擇C語言的人已經變得越來越少了,主要原因還是在招聘崗位數量上無法和java,php等高階語言想媲美,但並不代表C語言已經窮途末路沒有前景了,C語言的角色從前臺變成了後臺服務,在一些關鍵領域還承擔著不可替代的作用,並且,雖然目前C語言的學習熱度大不如從前,但他的市場需求仍

tensorflow實踐 基本原理學習和框架使用

Tensorflow 是google大腦小組的工程師們開發的用於機器學習和深度神經網路方面的研究,它通過一個數據流圖來進行計算。[本文是對Tensorflow社群資料進行學習和實踐,其中文社群還是很

python3下tensorflow練習

1.瞭解tensorflow基本架構2.用梯度下降的方法訓練處模型3.視覺化樣本資料,視覺化訓練出的模型以及視覺化損失函式""" Created on Wed May 2 09:40:08 2018 @author: jiangcheng """ import tens

機器學習常見機器學習演算法比較

      機器學習演算法太多了,分類、迴歸、聚類、推薦、影象識別領域等等,要想找到一個合適演算法真的不容易,所以在實際應用中,我們一般都是採用啟發式學習方式來實驗。通常最開始我們都會選擇大家普遍認同的演算法,諸如SVM,GBDT,Adaboost,現在深度學習很火熱,神

雷鳴的遊戲人生 --- 如何開始學習程式設計?

    雷鳴的遊戲人生(六) --- 如何從開始學習程式設計(到放棄)?     前5篇文章算是前情交代和試水,不過鑑於大家的反饋,我覺得每篇文章還是提出一個問題解決一個問題會對大家幫助更大,同樣的