ニューラルネットワークのネットレッスン研究ノート(1)

ニューラルネットワークのネット授業研究ノート

TensorFlow基本的な使い方

パラメータ(重量)

例:tf.Variable(tf.random_normal([2,3]、STDDEV = 2、0 =平均、種子= 1)= W

  • tf.random_normal()正規分布
  • [2,3] * 3 2の行列を生成します
  • 2のSTDDEV = 2標準偏差
  • 0を意味= 0を意味します
  • 0に設定されている場合、シード= 1ランダムシード、異なる各乱数

tf.truncated_normal()再生された2点以上の平均値、標準偏差から点の過度の偏差を除去
tf.random_uniform()均一に分布
tf.ones(1)完全配列
tf.zeros))を完全配列TF 0例えばtf.fillとして完全な値の.fill()配列、([2,3]、6) 、完全な3×2アレイ6生成
値tf.constantに直接(tf.constant)を([1,2 3])、[1,2,3]を生成します


ニューラルネットワークの基本的な実現

  1. 、データセットを準備入力として特徴を抽出し、ニューラルネットワークパス
  2. NNの入力から出力への建築構造物、(順方向伝搬 - 出力を算出>算出マップは、実行セッション数を構築します)
  3. 特徴データの数は、NN、NN反復最適化パラメータ( - >最適化パラメータ学習モデルバックプロパゲーション)を与え
  4. 訓練されたモデルの予測および分類を用いて(時々使用が新たなデータを供給し、ネットワークに設定し、その後のパラメータを最適化した)
    二つのプロセス:訓練プロセスと使用

順方向伝搬(完全に接続されたニューラルネットワーク)

建設モデル - >実現の推論

仮定xが入力されると、マトリックスは、1 * 2(二つの特徴)は、一般的に層を指し、コンピューティング層、計算層より入力された層を指します。

変数(変数)を初期化
でのSESのtf.global_variables_initializerタイプ()
一時のSESのfeed_dict =(... x)はれる値にプレースホルダtf.placeholder用()、
データを複数に供給することができるに、一次元の形状はどれも書くことができません

X = tf.placeholder(tf.float32、形状= F(なし、2))

init_op=tf.global_variables_initializer()
sess.run(init_op)

逆伝搬

目的:NNモデルトレーニングデータの機能の損失を最小限に抑えるために、すべてのパラメータの減少の勾配を使用して、モデルパラメータを訓練

損失関数(損失)=予測値(y)と既知の答え(Y_(タグが事前に提供される))ギャップ

二乗誤差(MSE)平均 関数がTensorFlowように表すことができます。 画像

loss=tf.reduce_mean(tf.square(y_-y) 

バックプロパゲーショントレーニング方法:最適化の目的は、損失を低減することです

オプティマイザ: あなたが使用することができたときにいずれかを選択し、あなたが見ることができる、彼らは、引数を持って学習率をlearning_rate 画像

学習率は、各パラメータの更新の大きさを決定し、あなたは、0.001のような小さな値を、いっぱいに開始することができます

フォールバック上部ニューラルネットワークが達成される
機能- >タグは、トレーニングセットが抽出された特徴としてだけでなく、それに対応するタグに限りない
伝送、計算されたYの前に、その後、伝搬損失値を計算逆


ニューラルネットワークの訓練基準は、データと確率に基づいており、人間マーキング方法を知らなかった
例:

#coding:utf - 8
import tensorflow as tf
import numpy as np  #python的科学计数模块

BATCH_SIZE=5 #表示一次喂入多少组数据,每次不可过大 seed=23455 #基于seed产生随机数 rng=np.random.RandomState(seed) X=rng.rand(32,2)#随机数返回32*2的矩阵,表示32体积、重量 做为输入数据集 Y=[[int(x0+x1<1)] for (x0,x1) in X]#生成训练集对应的标签,此处人为给出是否合格的标准(虚拟的样本和标签) print("X:\n",X)#构建出数据集x print("Y:\n",Y)#构建出数据集对应的标签y #定义神经网络的输入、输出和参数 x=tf.placeholder(tf.float32,shape=(None,2)) #输入的特征,不知道多少组,但是知道有两个特征(第一维表示多少组,第二维表示特征个数) y_=tf.placeholder(tf.float32,shape=(None,1)) #标准答案(合格或不合格) #使用正态分布生成随机数 w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1)) #输入是两个特征,隐藏层用三个神经元,对应x w2=tf.Variable(tf.random_normal([3,2],stddev=1,seed=1)) #输出是一个数,对应y #前向传播,用矩阵乘法实现 a=tf.matmul(x,w1) y=tf.matmul(a,w2) #反向传播 learning_rate=0.001 loss=tf.reduce_mean(tf.square(y-y_)) train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)#梯度下降 #生成会话,训练steps轮 with tf.Session() as sess: init_op=tf.global_variables_initializer() sess.run(init_op) #输出训练之前: print("w1:\n",sess.run(w1)) print("w2:\n",sess.run(w2)) steps=3000 for i in range(steps): start=(i*BATCH_SIZE)%32 end=start+BATCH_SIZE sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]})#每轮从X和Y中抽取Start-End个特征和标签 if i%500 == 0:#每500轮打印一次losstotal_loss=sess.run(loss,feed_dict={x: X,y_:Y}) print("After training %d steps,loss on all data is %g" %(i,total_loss)) print("\nw1:",sess.run(w1)) print("\nw2:",sess.run(w2)) 

結果:

X:[0.83494319 0.11482951]
[0.66899751 0.46594987]
[0.60181666 0.58838408]
[0.31836656 0.20502072]
[0.87043944 0.02679395]
[0.41539811 0.43938369]
[0.68635684 0.24833404]
[0.97315228 0.68541849]
[0.03081617 0.89479913]
[0.24665715 0.28584862]
[0.31375667 0.47718349]
[0.56689254 0.77079148 ]
[0.7321604 0.35828963]
[0.15724842 0.94294584]
[0.34933722 0.84634483]
[0.50304053 0.81299619]
[0.23869886 0.9895604]
[0.4636501 0.32531094]
[0.36510487 0.97365522]
[0.73350238 0.83833013]
[0.61810158 0.12580353]
[0.59274817 0.18779828]
[0.87150299 0.34679501]
【0.25883219 0.50002932]
[0.75690948 0.83429824]
[0.29316649 0.05646578]
[0.10409134 0.88235166]
[0.06727785 0.57784761]
[0.38492705 0.48384792]
[0.69234428 0.19687348]
[0.42783492 0.73416985]
[0.09696069 0.04883936]
Y:[1]、[0]、[0 ]、[1]、[1]、[1]、[1]、[0]、[1]、[1]、[1]、[0]、[0]、[0]、[0]、 [0]、[0]、[1]、[0]、[0]、[1]、[1]、[0]、[1]、[0]、[1]、[1]、[1 ]、[1]、[1]、[0]、[1]
W1:[-0.8113182 1.4845988 0.06532937]
[-2.4427042 0.0992484 0.5912243]
W2:
[-0.8113182 1.4845988]
[0.06532937 -2.4427042]
[0.0992484 0.5912243 ]
トレーニング0ステップの後、すべてのデータ損失が12.0156である
トレーニング500のステップの後、すべてのデータに損失が0.696271であります
トレーニング1000のステップの後、すべてのデータの損失は0.53858で
トレーニング1500回のステップの後に、すべてのデータの損失が0.483959である
トレーニング2000回のステップの後に、すべてのデータの損失が0.454848である
トレーニング2500回のステップの後に、すべてのデータの損失は0.438255である
W1:[[-0.30248263 0.06204198 0.6001488] [-2.0333931 -0.48535204 0.7457628] W2:[-0.30288324 0.6126571] [0.13707067 -1.9931065] [-0.01895767は0.9599734]
[] 3.0sに仕上がり

フォローアップは、より良い効果を試すれ、BATCH_SIZEとオプティマイザを変更することができます

概要:

ニューラルネットワーク構造:準備、過去を描く続編、バックプロパゲーション、反復

  1. 調製:インポートモジュールは定数を定義し、生成された最適化データセットを変更します
  2. フォワード伝搬:入力パラメータを定義し、出力
  • 入力:X = Y_ =
  • パラメータ:W1 = W2 =
  • 出力:= Y =

3.バックプロパゲーション:損失関数定義、バックプロパゲーション法

  • 損失=
  • train_step =

4.出力:トレーニング手順ホイール

for i in range():
    start=
    end=
    sess.run(train_step,feed_dict)
常用输出,每隔一定轮数输出一次loss

おすすめ

転載: www.cnblogs.com/TheSilverMoon/p/10962357.html