1. 程式人生 > >基於神經網路的二分類問題

基於神經網路的二分類問題

下面是利用模擬的資料集訓練神經網路,解決二分類問題:

#===========================================================================
#==============神經網路解決二分類問題========================================
#==========================================================================

import tensorflow as tf
from numpy.random import RandomState  #用於生成模擬資料集

#定義訓練資料batch的大小
batch_size = 8
#定義神經網路的引數
w1 = tf.Variable(tf.random_normal([2, 3], stddev = 1, seed = 1))
w2 = tf.Variable(tf.random_normal([3, 1], stddev = 1, seed = 1))
#定義佔位符
x = tf.placeholder(tf.float32, shape = (None, 2), name = 'x_input')
y_ = tf.placeholder(tf.float32, shape = (None, 1), name = 'y_input')
#定義神經網路前向傳播過程
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
#定義損失函式和反向傳播演算法
#tf.clip_by_value(A, min, max) A為張量,將A中的每一個元素壓縮到 min 與 max 之間
cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)

#通過隨機數生成一個模擬資料集
rdm = RandomState(1)  #區域性隨機種子,其中‘1’為種子,不同的種子產生的隨機數也不相同
dataset_size = 128
X = rdm.rand(dataset_size, 2)
#定義規定來給出樣本標籤
#所有x1+x2<1規定為正樣本;其他規定為負樣本;
#此處我們簡化為:0表示負樣本;1表示正樣本
Y = [[int(x1+x2 < 1)] for (x1, x2) in X]

#建立一個會話
with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)  #啟動初始化
    print(sess.run(w1))  #列印訓練前引數
    print(sess.run(w2))  
    
    #設定訓練次數
    STEPS = 10000
    for i in range(STEPS):
        start = (i * batch_size) % dataset_size  #每次選取batch_size個樣本進行訓練
        end = min(start+batch_size, dataset_size) 
        #通過選取的樣本訓練神經網路並更新引數
        sess.run(train_step, feed_dict = {x: X[start:end], y_: Y[start:end]})
        
        if i%1000 == 0:
            #每隔一段時間計算所有資料上的交叉熵並輸出
            total_cross_entropy = sess.run(cross_entropy, feed_dict = {x: X, y_: Y})
            print('After %d training steps(s),  cross entropy on all data is %g' % (i, total_cross_entropy))
    #訓練完後列印網路引數       
    print(sess.run(w1))
    print(sess.run(w2))
#===========================================================================

訓練的結果:


通過結果可看出:隨著訓練的進行,交叉熵逐漸減小,說明預測的結果和真實值越接近。

相關推薦

六天搞懂“深度學習”之四:基於神經網路分類

分類用於確定資料所歸屬的類別,而回歸是根據已知的資料進行推斷或估計某個未知量,比如根據年齡和教育水平進行收入預測分析。分類的典型應用是垃圾郵件過濾和字元識別。 雖然神經網路適用於分類和迴歸,但卻很少用於迴歸。這不是因為它的效能不好,而是因為大多數迴歸問題可以用更簡單的模型來解決。(迴歸問

基於神經網路分類問題

下面是利用模擬的資料集訓練神經網路,解決二分類問題: #=========================================================================== #==============神經網路解決二分類問題=======

Spark中基於神經網路的MLPC(多層感知器分類器)的使用

本文首發於我的個人部落格QIMING.INFO,轉載請帶上鍊接及署名。 MLPC(Multilayer Perceptron Classifier),多層感知器分類器,是一種基於前饋人工神經網路(ANN)的分類器。Spark中目前僅支援此種與神經網路有關的演算

Pybrain學習筆記-4 基於前饋神經網路分類

話不多說,直接上程式碼: 5.test_pybrian_5 #!usr/bin/env python #_*_coding:utf-8_*_ ''' Created on 2017年4月14日 Topic:Classification with Feed-Forward Neural Networks @a

#####好好好好####Keras深度神經網路訓練分類模型的四種方法

Github程式碼: Keras樣例解析 歡迎光臨我的部落格:https://gaussic.github.io/2017/03/03/imdb-sentiment-classification/ (轉載請註明出處:https://gaussic.github.io) Keras的官方E

如何看待Pensieve:MIT基於神經網路的流媒體位元速率自適應策略(周超)

寫在前面 今年的SIGCOMM上, MIT CSAIL的一支研究團隊,發表了一篇名為Pensieve的工作,即利用神經網路優化位元速率自適應演算法,用於提高媒體傳輸質量。文章結果表明:與一般的state-of-the-art 方法相比,Pensieve能平均提升QoE高達12%–25%。之

使用雙lstm隱層的RNN神經網路分類預測

整體思路 這裡為了好執行,舉了個mnist的例子,對手寫圖片進行識別,每個圖片是28*28大小的,使用雙lstm隱層的結構進行分類預測,預測出10個數字類別的概率,整體的網路結構如下: (1)輸入層 [每個時間步的向量長度為28,一次訓練時連續輸入28個時間步,所以每次輸入資料為28*28] (

用TensorFlow基於神經網路實現井字棋(含程式碼)

為了展示如何應用神經網路演算法模型,我們將使用神經網路來學習優化井字棋(Tic Tac Toe)。明確井字棋是一種決策性遊戲,並且走棋步驟優化是確定的。 開始 為了訓練神經網路模型,我們有一系列優化的不同的走棋棋譜,棋譜基於棋盤位置列表和對應的最佳落子點。考慮到棋盤的對稱性,通

Tensorflow基於神經網路進行多元變量回歸分析

#引入相關庫 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from sklearn import prepro

基於神經網路的NER模型訓練

概述 該專案整理deeppavlov中程式碼而成,參考該框架的實現方法搭建一個命名實體的識別系統。 該專案使用了conll2003_v2資料集,其中標註的命名實體共計九類: ['O', 'B-LOC', 'B-PER', 'B-ORG', 'I-PER'

Keras搭建神經網路BPNN(分類問題)

import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn import datasets,preprocessing from sklearn.model_selection import train

基於神經網路(多層感知機)識別手寫數字

資料集是經典的MNIST,來自美國國家標準與技術研究所,是人工書寫的0~9數字圖片,圖片的畫素為28*28,圖片為灰度圖。MNIST分別為訓練集和測試集,訓練資料包含6萬個樣本,測試資料集包含1萬個樣本。使用Tensorflow框架載入資料集。 載入資料集的程式碼如下: import ten

基於神經網路的驗證碼實驗研究(一)

前言 本次實驗研究完整程式碼 ->進入 From Github 一.CAPTCHA 提到驗證碼,生活中各種各樣的平臺都會在使用者常規操作管理下實行驗證碼機制。對於我淺顯的理解,一是區分人與機器的認證互動,在有行為發生的情況下,我們要判斷是否是使用者主觀操作,本意所為,因

基於神經網路的文字相似度計算【醫療大資料】

任務描述 問句匹配是自然語言處理的最基本任務之一,是自動問答,聊天機器人,資訊檢索,機器翻譯等各種自然語言處理任務基礎。問句匹配的主要目的是判斷兩個問句之間的語義是否等價。判別標準主要根據主句(即提問者)所蘊含的意圖來判斷兩個語句是否等價,而不直接判斷兩個語句是否表達相

Tensorflow 搭建自己的神經網路()

卷積神經網路: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist=input_data.read_data_sets('MNIST_data',o

BP神經網路實現分類問題(python)

一些程式碼解釋 python版本:3.6 梯度更新 下面的程式碼 是對輸出層和隱層的梯度計算,具體可參考周志華機器學習103頁梯度更新公式 for i in range(self.outputn):#計算輸出層的梯度 y=

Cs231n課堂內容記錄-Lecture 7 神經網路

Lecture 7 神經網路二 課程內容記錄:https://zhuanlan.zhihu.com/p/21560667?refer=intelligentunit 1.協方差矩陣: 協方差(Covariance)在概率論和統計學中用於衡量兩個變數的總體誤差。而方差是協方差的一種特殊情況,即當兩個變數是

keras——基於神經網路的風格遷移生成藝術字

Keras是一個高層神經網路API,由純Python編寫而成,至少依賴Tensorflow、Theano、CNTK一種神經網路框架,這裡建議用Tensorflow。Keras的特性:1.簡易和快速的原型設計(keras具有高度模組化,極簡,和可擴充特性)2.支援CNN和RNN

基於神經網路的影象風格遷移(一)

    影象的風格遷移始於2015年Gates的論文“Image Style Transfer Using Convolutional Neural Networks”,所做的工作很好描述,就是由一張內容圖片和一張風格圖片進行融合之後,得到經風格渲染之後的合成圖片。示例如下 

基於神經網路的目標檢測論文之神經網路基礎:神經網路的優化方法

注:本文源自本人的碩士畢業論文,未經許可,嚴禁轉載! 原文請參考知網:知網地址 本章節有部分公式無法顯示,詳見原版論文 2.4 神經網路的優化方法 2.4.1 過擬合與規範化 物理學家費米曾說過,如果有四個引數,我可以模擬一頭大象,而如果有五個引數,我還能讓他卷