日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习之tensorflow (一) XORerr1 -修改

發布時間:2023/12/10 pytorch 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习之tensorflow (一) XORerr1 -修改 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

主要修改有三個地方:

  • 隱藏層一的運算從sigmoid修改為add運算;
  • 輸出層的運算修改為sigmoid(原來是什么運算忘記了。。);
  • 將優化算法從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)

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

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

    以上是生活随笔為你收集整理的深度学习之tensorflow (一) XORerr1 -修改的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。