<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      CH5 用神經網絡解決線性問題

      • 了解非線性問題、分類問題
      • 掌握神經網絡解決二分類問題
      • 掌握隨機生成訓練數據的方法

      非線性問題

      三好學生問題:家長們再次湊到一起,但這次情況不一樣了,孩子們的總分不知道,僅知道是否評選上三好學生的結果。

      計算總分的規則仍然是:總分 = 德育分*60% + 智育分*30% + 體育分*10%
      評選三好學生的標準是:總分 ≥ 95

      家長不知道這兩條規則。

      這是一個典型的分類問題。學校一定是以德育分、智育分和體育分三項分數為依據,把學生們分成兩類:三好學生和非三好學生。因此,這是一個常見的二分類問題。下圖是用神經網絡簡述二分類問題。

      image

      分類問題一般是非線性的。

      • 可以看出,當總分達到95之后,y值有一個跳變,并非線性的(一條直線)
      • y=f(xA),跳變函數/階躍函數
      • “一票否決制”

      image

      設計神經網絡模型

      總分(0~100)= 德育分60% + 智育分30% + 體育分*10% -> 評選結果(0、1)

      激活函數:把線性關系轉換成非線性關系的函數。激活函數 sigmoid 函數的作用是把參數轉換成為 0 到 1 之間的一個小數。

      image

      使用激活函數后的神經網絡模型:

      image

      實現該網絡模型的代碼:

      # import tensorflow as tf
      import tensorflow.compat.v1 as tf
      
      tf.compat.v1.disable_eager_execution()
      
      x = tf.placeholder(dtype=tf.float32)
      yTrain = tf.placeholder(dtype=tf.float32)
      w = tf.Variable(tf.zeros([3]), dtype=tf.float32)
      
      n1 = w * x
      n2 = tf.reduce_sum(n1)
      
      y = tf.nn.sigmoid(n2)
      

      準備訓練數據

      使用 random 產生隨機數

      import random
      
      random.seed() # 初始化隨機數種子,增加隨機性
      random.random() # 產生一個 [0,1) 范圍內的小數
      
      r = random.random() * 10 # 通過乘以一個整數,使產生的隨機數的范圍增大,此處范圍為 [0,10)
      

      產生隨機訓練數據

      import random
      
      random.seed()
      
      # 產生一個 [0,100] 范圍內的整數代表某一科分數
      xData = [int(random.random() * 101),int(random.random() * 101),int(random.random() * 101)]
      
      # 按規則生成總分
      xAll = xData[0] * 0.6 + xData[1] * 0.3 + xData[2] * 0.1
      
      # 按規則生成評選結果
      if xAll >= 95:
          yTrainData = 1
      else:
          yTrainData = 0
      
      print("xData: %s" %xData)
      print("yTrainData: %s" %yTrainData)
      

      image

      優化產生的訓練數據,產生一個[60,101) 范圍內的更合理的分數:

      xData = [
          int(random.random() * 41 + 60),
          int(random.random() * 41 + 60),
          int(random.random() * 41 + 60)
      ]
      

      image

      產生更多結果為 1 的訓練數據,產生一個[93,101)范圍內的符合三好學生要求的分數:

      xData = [
          int(random.random() * 8 + 93),
          int(random.random() * 8 + 93),
          int(random.random() * 8 + 93)
      ]
      

      為什么要使用隨機數據來訓練神經網絡:

      • 并非“劇透”,用于演示和驗證
      • 符合人工收集的規貝
      • 滿足神經網絡大規模訓練的需要

      訓練

      # import tensorflow as tf
      import tensorflow.compat.v1 as tf
      import random
      
      tf.compat.v1.disable_eager_execution()
      
      random.seed()
      
      x = tf.placeholder(dtype=tf.float32)
      yTrain = tf.placeholder(dtype=tf.float32)
      w = tf.Variable(tf.zeros([3]), dtype=tf.float32)
      
      wn = tf.nn.softmax(w)
      
      n1 = wn * x
      
      n2 = tf.reduce_sum(n1)
      y = tf.nn.sigmoid(n2)
      loss = tf.abs(yTrain - y)
      
      optimizer = tf.train.RMSPropOptimizer(0.1)
      train = optimizer.minimize(loss)
      
      sess = tf.Session()
      sess.run(tf.global_variables_initializer())
      
      for i in range(5):
          xData = [
              int(random.random() * 8 + 93),
              int(random.random() * 8 + 93),
              int(random.random() * 8 + 93)
          ]
      
          xAll = xData[0] * 0.6 + xData[1] * 0.3 + xData[2] * 0.1
      
          if xAll >= 95:
              yTrainData = 1
          else:
              yTrainData = 0
      
          result = sess.run(
              [train, x, yTrain, w, n2, y, loss], 
              feed_dict={x:xData, yTrain:yTrainData}
          )
      
          print(result)
      
          xData = [
              int(random.random() * 41 + 60),
              int(random.random() * 41 + 60),
              int(random.random() * 41 + 60)
          ]
      
          xAll = xData[0] * 0.6 + xData[1] * 0.3 + xData[2] * 0.1
      
          if xAll >= 95:
              yTrainData = 1
          else:
              yTrainData = 0
      
          result = sess.run(
              [train, x, yTrain, w, n2, y, loss],
              feed_dict={x:xData, yTrain:yTrainData}
          )
      
          print(result)
      

      觀察訓練結果:

      image

      增加偏移量 b 來加速訓練:

      + b = tf.Variable(80, dtype=tf.float32)
      - n2 = tf.reduce_sum(n1)
      + n2 = tf.reduce_sum(n1) - b
      
      # import tensorflow as tf
      import tensorflow.compat.v1 as tf
      import random
      
      tf.compat.v1.disable_eager_execution()
      
      random.seed()
      
      x = tf.placeholder(dtype=tf.float32)
      yTrain = tf.placeholder(dtype=tf.float32)
      w = tf.Variable(tf.zeros([3]), dtype=tf.float32)
      b = tf.Variable(80, dtype=tf.float32)
      
      wn = tf.nn.softmax(w)
      
      n1 = wn * x
      n2 = tf.reduce_sum(n1) - b
      
      y = tf.nn.sigmoid(n2)
      loss = tf.abs(yTrain - y)
      
      optimizer = tf.train.RMSPropOptimizer(0.1)
      train = optimizer.minimize(loss)
      
      sess = tf.Session()
      sess.run(tf.global_variables_initializer())
      
      for i in range(5):
          xData = [
              int(random.random() * 8 + 93),
              int(random.random() * 8 + 93),
              int(random.random() * 8 + 93)
          ]
      
          xAll = xData[0] * 0.6 + xData[1] * 0.3 + xData[2] * 0.1
      
          if xAll >= 95:
              yTrainData = 1
          else:
              yTrainData = 0
      
          result = sess.run(
              [train, x, yTrain, w, n2, y, loss], 
              feed_dict={x:xData, yTrain:yTrainData}
          )
      
          print(result)
      
          xData = [
              int(random.random() * 41 + 60),
              int(random.random() * 41 + 60),
              int(random.random() * 41 + 60)
          ]
      
          xAll = xData[0] * 0.6 + xData[1] * 0.3 + xData[2] * 0.1
      
          if xAll >= 95:
              yTrainData = 1
          else:
              yTrainData = 0
      
          result = sess.run(
              [train, x, yTrain, w, n2, y, loss],
              feed_dict={x:xData, yTrain:yTrainData}
          )
      
          print(result)
      

      image

      - b = tf.Variable(80, dtype=tf.float32)
      + b = tf.Variable(95, dtype=tf.float32)
      

      image

      批量產生隨機訓練數據:

      import random
      import numpy as np
      
      tf.compat.v1.disable_eager_execution()
      
      random.seed()
      
      rowCount = 5
      
      xData = np.full(
          shape=(rowCount, 3),
          fill_value=0,
          dtype=np.float32
      )
      
      yTrainData = np.full(
          shape=rowCount,
          fill_value=0,
          dtype=np.float32
      )
      
      for i in range(rowCount):
          xData[i][0] = int(random.random() * 11 + 90)
          xData[i][1] = int(random.random() * 11 + 90)
          xData[i][2] = int(random.random() * 11 + 90)
      
          xAll = xData[i][0] * 0.6 + xData[i][0] * 0.3 + xData[i][2] * 0.1
      
      • numpy 是常用于數學計算的類庫
      • npful 函數用于向數組中填充初始數值
      • 使用循環來生成批量的數據
      # import tensorflow as tf
      import tensorflow.compat.v1 as tf
      import random
      import numpy as np
      
      tf.compat.v1.disable_eager_execution()
      
      random.seed()
      
      rowCount = 5
      
      xData = np.full(
          shape=(rowCount, 3),
          fill_value=0,
          dtype=np.float32
      )
      
      yTrainData = np.full(
          shape=rowCount,
          fill_value=0,
          dtype=np.float32
      )
      
      goodCount = 0
      
      for i in range(rowCount):
          xData[i][0] = int(random.random() * 11 + 90)
          xData[i][1] = int(random.random() * 11 + 90)
          xData[i][2] = int(random.random() * 11 + 90)
      
          xAll = xData[i][0] * 0.6 + xData[i][1] * 0.3 + xData[i][2] * 0.1
      
          if xAll >= 95:
              yTrainData[i] = 1
              goodCount = goodCount + 1
          else:
              yTrainData[i] = 0
      
      print("xData=%s" %xData)
      print("yTrainData=%s" %yTrainData)
      print("goodCount=%s" %goodCount)
      
      x = tf.placeholder(dtype=tf.float32)
      yTrain = tf.placeholder(dtype=tf.float32)
      w = tf.Variable(tf.zeros([3]), dtype=tf.float32)
      b = tf.Variable(80, dtype=tf.float32)
      
      wn = tf.nn.softmax(w)
      
      n1 = wn * x
      n2 = tf.reduce_sum(n1) - b
      
      y = tf.nn.sigmoid(n2)
      loss = tf.abs(yTrain - y)
      
      optimizer = tf.train.RMSPropOptimizer(0.1)
      train = optimizer.minimize(loss)
      
      sess = tf.Session()
      sess.run(tf.global_variables_initializer())
      
      for i in range(2):
          for j in range(rowCount):
              result = sess.run(
                  [train, x, yTrain, wn, b, n2, y, loss],
                  feed_dict={x:xData[j], yTrain:yTrainData[j]}
              )
              print(result)
      

      image

      可以看到,xData 是一個二維數組,其中包含了 5 條數據,每條是 3 項符合定義范圍的分數。tTrainData 中包含 3 個 1,也就是說有 3 位學生符合三好學生的條件,接下來輸出的 goodCount 也確實等于 3,再往下的訓練也一切正常。

      練習

      1. 編程生成 5 [-20,20) 范圍內的隨機數,并用 TensorFlow 設法求出這些數字進行 sigmoid 操作后的結果。

        import tensorflow as tf
        import random
        
        a = tf.placeholder(dtype=tf.float32)
        b = tf.nn.sigmoid(a)
        sess = tf.Session()
        
        for i in range(5):
        	print(sess.run(b, feed_dict={a: random.random() * 40 - 20}))
        
      2. 編程解決下述非線性問題

        • 輸入數據 [1,1,1],輸出目標值:2
        • 輸入數據 [1,0,1],輸出目標值:1
        • 輸入數據 [1,2,3],輸出目標值:3
        import tensorflow as tf
        
        x = tf.placeholder(shape=[3], dtype=tf.float32)
        yTrain = tf.placeholder(shape=[], dtype=tf.float32)
        
        w = tf.Variable(tf.zeros([3]), dtype=tf.float32)
        b = tf.Variable(0, dtype=tf.float32)
        y = tf.reduce_sum(tf.nn.sigmoid(x * w + b))
        
        loss = tf.abs(y - yTrain)
        optimizer = tf.train.RMSPropOptimizer(0.1)
        train = optimizer.minimize(loss)
        
        sess = tf.Session()
        sess.run(tf.global_variables_initializer())
        
        for i in range(1000):
        	print(sess.run([train, y, yTrain, loss], feed_dict={x: [1, 1, 1], yTrain: 2}))
        	print(sess.run([train, y, yTrain, loss], feed_dict={x: [1, 0, 1], yTrain: 1}))
        	print(sess.run([train, y, yTrain, loss], feed_dict={x: [1, 2, 3], yTrain: 3}))
        
      posted @ 2021-10-04 20:30  guangzan  閱讀(530)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 高中女无套中出17p| 在线精品自拍亚洲第一区| 亚洲va久久久噜噜噜久久狠狠 | 亚洲国产理论片在线播放| 一本久道久久综合狠狠躁av| 亚洲欧洲av人一区二区| av无码精品一区二区乱子| 日韩av一区二区三区不卡| 国产一区一一区高清不卡| 久久青草国产精品一区| 欧美性猛交xxxx乱大交丰满| 国产精品综合一区二区三区| 亚洲精品久久久久久久久久吃药| 久久久久久久久毛片精品| 亚洲产国偷v产偷v自拍色戒| 国产a网站| 欧美成人www免费全部网站 | 无码成人午夜在线观看| 99精产国品一二三产品香蕉| 亚洲岛国成人免费av| 久热综合在线亚洲精品| 麻豆一区二区三区精品视频 | 内射无套内射国产精品视频| 国产成人无码av大片大片在线观看 | 亚洲无人区码二码三码区| 久久精品人人做人人爽97| 国产精品小仙女自拍视频| 人妻系列无码专区69影院| 亚洲一区二区av高清| 亚洲最大成人在线播放| 乱60一70归性欧老妇| 亚洲人成在线观看网站不卡| 40岁大乳的熟妇在线观看| 一区二区三区综合在线视频| 毛茸茸性xxxx毛茸茸毛茸茸| 久久涩综合一区二区三区| 国产高清在线精品一区APP| 成人自拍小视频在线观看| 色狠狠色婷婷丁香五月| 久久久无码人妻精品无码| 全部免费毛片在线播放|