深度學習之tensorflow (一) XORerr1 -修改

博客背景是學習《深度學習之TensorFlow》這本書籍中的作業,修改第七章的作業,把XOR-異或的錯誤代碼修改為正確的。

主要修改有三個地方:

  1. 隱藏層一的運算從sigmoid修改為add運算;
  2. 輸出層的運算修改為sigmoid(原來是什么運算忘記了。。);
  3. 將優化算法從GradientDescentOptimizer修改為牛逼的Adam算法;
# -*- coding: utf-8 -*-
"""
"""
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plttf.reset_default_graph()
tf.set_random_seed(55)
np.random.seed(55)learning_rate = 0.01
input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]  # XOR input
output_data = [[0.], [1.], [1.], [0.]]  # XOR output
hidden_nodes = 10  #代表該網絡層的神經元個數
n_input = tf.placeholder(tf.float32, shape=[None, 2], name="n_input")
n_output = tf.placeholder(tf.float32, shape=[None, 1], name="n_output")
# hidden layer's bias neuron
b_hidden = tf.Variable(0.1, name="hidden_bias")  
W_hidden = tf.Variable(tf.random_normal([2, hidden_nodes]), name="hidden_weights")
"""修改sigmoid為add運算"""
hidden = tf.add(tf.matmul(n_input, W_hidden) ,b_hidden)
hidden1 = tf.nn.relu(hidden)
################
# output layer #
################
W_output = tf.Variable(tf.random_normal([hidden_nodes, 1]), name="output_weights")  # output layer's 
b_output =  tf.Variable(0.1, name="output_bias")##output = tf.nn.relu(tf.matmul(hidden, W_output)+b_output)  # 出來的都是nan calc output layer's 
#softmax
y = tf.matmul(hidden1, W_output)+b_output
"""修改sigmoid運算"""
output = tf.nn.sigmoid(y)
#交叉熵
loss = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))#optimizer = tf.train.GradientDescentOptimizer(0.01)
"""修改為Adam的優化器"""
optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate)
train = optimizer.minimize(loss)  # let the optimizer train#####################
# train the network #
#####################
with tf.Session() as sess:sess.run(tf.global_variables_initializer())for epoch in range(0, 2001):  # run the training operationcvalues = sess.run([train, loss, W_hidden, b_hidden, W_output],feed_dict={n_input: input_data, n_output: output_data})# print some debug stuffif epoch % 200 == 0:print("")print("step: {:>3}".format(epoch))print("loss: {}".format(cvalues[1]))#print(W_hidden.value())# print("b_hidden: {}".format(cvalues[3]))# print("W_hidden: {}".format(cvalues[2]))# print("W_output: {}".format(cvalues[4]))print("")for i in range(len(input_data)):print("input: {} | output: {}".format(input_data[i], sess.run(output, feed_dict={n_input: [input_data[i]]})))

備注:理論知識還是薄弱啊,花了一天的時間來修改該error

順便把7-10和7-11的源碼修改了

7-10修改部分:

隱藏層的神經元個數更改為10個(經測試只要大于2即可)

hidden_nodes = 10

將輸出層的激活函數更改為sigmoid即可:

"""將激活函數修改sigmoid即可"""
output = tf.nn.sigmoid(y)

7-11修改部分:

隱藏層的神經元個數更改為10個(經測試只要大于2即可)

hidden_nodes = 10

""""修改損失函數為均值平方差"""

#cross_entropy = -tf.reduce_mean(n_output * tf.log(output))#?
cross_entropy = tf.square(n_output-output)

總結:(個人理解,不對請回復)

  1. 神經網絡的層里面的神經元個數要大于輸入的維度,以本文解決異或問題,二維的輸入,那么針對單層隱藏層來說,其神經元個數大于二才有效;
  2. 激活函數的選擇。該處主要體現在7-10的代碼修改上,“Relu”與“Sigmiod”相比容易陷入局部最優解,所以選擇合適的激活函數尤其重要,這部分理解還不太透徹,主要是看書的結論得知的,具體是為什么再作深入理解;此處看到有博客說“relu和softmax兩層不要連著用,最好將relu改成tanh”尚未理解,正在證明其真實性。
  3. 損失函數。損失函數也很重要,以7-11的代碼修改為例,損失函數盡可能選擇已知的比較常用合理的函數,比如均值平方差和交叉熵等。
  4. 梯度下降的函數,即優化函數“optimizer”的選擇。常用的有BGD、SGD等,其實就是根據每次計算損失函數所需的訓練樣本數量來劃分的。為克服BGD和SGD的缺點,一般是使用小批量的數據進行損失函數更新,即降低了隨機性又提高了訓練效率。TF中常用的梯度下降函數有七種,但比較牛逼的"Adam"優化函數,高效解決優化問題(具體的內容會另寫一篇博客介紹)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256554.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256554.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256554.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

可調用對象

# -*- coding: utf-8 -*- #python 27 #xiaodeng #可調用對象 #http://www.cnpythoner.com/post/306.html#定義: #許多python對象都是可調用的,即:任何通過函數操作符()來調用的對象。 #callable()是一個布爾函數,確定一個對象是否…

Ansys ——自定義不規則形狀梁截面

目錄 導讀: 1、問題描述 2.CAD繪制截面,導出.sat文件格式 (1)在三維建模工作空間下繪制截面

Language-Directed Hardware Design for Network Performance Monitoring——Marple

網絡監控困難 1、僅僅通過去增加特定的監控功能到交換機是不能滿足運營商不斷變化的需求的。(交換機需要支持網絡性能問題的表達語言)2、他們缺乏對網絡深處的性能問題進行本地化的可見性,間接推斷網絡問題的原因3、當前的交換機監控并沒有提…

深度學習基礎(四)優化函數(梯度下降函數)

梯度下降函數也就是優化函數,在神經網絡訓練過程最重要的函數。重要程度類似于調校對于汽車的重要性,搭建模型和參數設置等操作“造好了一輛汽車”,優化函數“調校”。因為汽車最終的操控性和加速性能等指標很大程度取決于調校,調…

ANSYS 簡支梁的約束

在ansys中,梁的定義都是通過梁截面和軸線進行定義的,不同的梁的區別在ansys中的體現僅在于約束的處理上不同 1.簡支梁的約束 假設簡支梁的梁軸線是x軸,可以繞z軸彎曲,則簡支梁的約束: 起始點:X、Y、Z、RO…

js 實現 復制 功能 (zeroclipboard)

#復制功能因訪問權限和安全問題, 被瀏覽器禁了# 我要實現的功能:點擊復制按鈕,復制瀏覽器的當前頁面地址,加上用戶選擇的參數(用戶查找過濾),直接將該鏈接發給別人,點擊打開就是對應…

解決 kindle 書籍字體顏色偏淡問題的方法

現象 通過Markdown轉換而來的mobi格式書籍都有一個大問題:字體偏淡,放在kindle上看對比度很差。 原因分析: 導致這種問題的原因,可能是因為在制作電子書的過程中,這些內容是被標注了彩色或灰色。這可能更適合全彩屏幕的…

車智匯模式系統技術開發數據

用戶思維:對經營者和消費者的理解,以用戶為中心,學會換位思考,發掘用戶的真正想法和需求。以前是生產什么就賣什么(自己制作賣點),現在是了解用戶需要什么才做什么(實現賣點)。車智匯是一款以"云平臺智能終端&quo…

深度學習基礎(二)激活函數

激活函數(也被稱為激勵函數)的意義就是加入非線性因素,使得神經網絡具有非線性表達的能力。其必要條件是激活函數的輸入和輸出都是可微的,因為神經網絡要求處處可微。(可微是指函數的各個方向可導,可微大于等于可導) …

ANSYS——固定斜度的變截面變截面的定義、自由耦合和變截面的定義

目錄 1.變截面梁 2.自由度耦合 3.變截面的ANSYS GUI操作 4.疑問 以下兩個定義轉自:http://wenku.baidu.com/view/04e43ebbfd0a79563c1e722d.html 上述文章中還包含了一個實例,可以參考

Please ensure that adb is correctly located at……問題解決方案

啟動android模擬器時.有時會報The connection to adb is down, and a severe error has occured.的錯誤.在網友說在任務管理器上把所有adb.exe關閉掉.重啟eclipse.但試過不管用.所以在外國網站上找到一種可行的方法:1.先把eclipse關閉.2.在管理器轉到你的android SDK 的platfor…

2016.8.23

1 貼吧里看到一個關于因為游戲鬧翻的故事,大致情況是這樣的:某女初中的時候有個閨蜜。后來此人因為抑郁之類的精神問題被送到醫院,這讓女主很苦悶且脆弱又孤單,這時候她的閨蜜去醫院看望她,然后女主就喜歡上了這位閨蜜…

[Spring]01_環境配置

1.1 Spring jar包下載 (1)進入官網http://repo.spring.io (2)在資源庫界面點擊Artifacts標簽,然后點擊libs-release-local,展開后依次點擊org -> springframework -> spring。 然后,就可…

ANSYS——常見梁的后處理方法(彎曲應力、彎矩、軸力等的顯示)

目錄 a. 顯示變形 b. 顯示當量應力 c. 顯示彎曲應力 d. 支反力顯示 e. 將圖形存入文件

深度學習基礎(三)loss函數

loss函數,即損失函數,是決定網絡學習質量的關鍵。若網絡結構不變的前提下,損失函數選擇不當會導致模型精度差等后果。若有錯誤,敬請指正,Thank you! 目錄 一、loss函數定義 二、常見的loss算法種類 1.M…

C#中DataTable中的Compute方法使用收集

Compute函數的參數就兩個:Expression,和Filter。 Expresstion是計算表達式,關于Expression的詳細內容請看這里“http://msdn2.microsoft.com/zh-cn/library/system.data.datacolumn.expression(VS.80).aspx”。而Filter則是條件過濾器&#x…

Lazy延遲實例對象

懶對象,實現延遲實例對象。 轉載于:https://www.cnblogs.com/yj2010/p/5798622.html

Shift鍵關閉大小寫

同事說他的大寫開了之后無法關閉,我檢查了下,的確是,非常奇怪,然后我不小心按了下下面的Shift鍵,大寫指示燈滅了,我立即明白是怎么回事,原來是文字和語言設置里的Key setting改了,如…

ANSYS——如何選擇合適的單元類型

目錄 1.該選桿單元(Link)還是梁單元(Beam)? 2.對于薄壁結構,是選實體單元還是殼單元?

深度學習之pytorch(一) 環境安裝

快2周沒更新博客了,別問為什么!我才不會告訴你忙的飛起!說心里話,個人更喜歡用tensorflow來做深度學習! 一、環境配置 1.win10 64位系統; 2.anaconda3; 3.不管是CPU還是GPU具有(…