1. ニューラルネットワークを構築してレイヤーを追加する 入力値、入力サイズ、出力サイズ、活性化関数 ニューラルネットワークを勉強したことがある人なら、次の図を見れば理解できるでしょう。理解できない場合は、私の別のブログ (http://www.cnblogs.com/wjy-lulu/p/6547542.html) を読んでください。 - def add_layer(inputs、in_size、out_size、activate = None):
- Weights = tf.Variable(tf.random_normal([in_size,out_size]))#ランダム初期化
- baises = tf.Variable(tf.zeros([1,out_size])+0.1)#ランダムでも構いませんが、0に初期化しないでください。固定値はランダムよりも優れています。
- y = tf.matmul(inputs, Weights) + baises #matmul: 行列の乗算、multipy: 一般的に数量の乗算
- 有効にする場合:
- y = アクティブ化(y)
- yを返す
2. 二次関数のトレーニング - テンソルフローをtfとしてインポートする
- numpyをnpとしてインポートする
-
- def add_layer(inputs、in_size、out_size、activate = None):
- Weights = tf.Variable(tf.random_normal([in_size,out_size]))#ランダム初期化
- baises = tf.Variable(tf.zeros([1,out_size])+0.1)#ランダムでも構いませんが、0に初期化しないでください。固定値はランダムよりも優れています。
- y = tf.matmul(inputs, Weights) + baises #matmul: 行列の乗算、multipy: 一般的に数量の乗算
- 有効にする場合:
- y = アクティブ化(y)
- yを返す
- __name__ == '__main__'の場合:
- x_data = np.linspace(-1,1,300,dtype=np.float32)[:,np.newaxis]#-1,1の数値を300個作成します。これはこの時点では1次元行列であり、次に2次元行列に変換されます ===[1,2,3]
- noise = np.random.normal(0,0.05,x_data.shape).astype(np.float32) #ノイズは (1,300) 形式、サイズは 0-0.05 です
- y_data = np.square(x_data) - 0.5 + noise # ノイズのある放物線
-
- xs = tf.placeholder(tf.float32,[None,1]) #外部入力データ
- ys = tf.placeholder(tf.float32,[なし,1])
-
- l1 = add_layer(xs,1,10,アクティブ化=tf.nn.relu)
- 予測 = add_layer(l1,10,1,activate=なし)
-
- 損失 = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))#エラー
- train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)# ステップ 0.1 での誤差の勾配最適化
-
- sess = tf.Session()
- sess.run( tf.global_variables_initializer())
- iが範囲(1000)内にある場合:
- sess.run(train_step, feed_dict={xs: x_data, ys: y_data})#トレーニング
- i%50 == 0の場合:
- print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))# エラーを表示
3. トレーニングプロセスの動的表示 示されている手順は、プログラム内で部分的に説明されています。その他の手順については、 他のブログを参照してください (http://www.cnblogs.com/wjy-lulu/p/7735987.html) - テンソルフローをtfとしてインポートする
- numpyをnpとしてインポートする
- matplotlib.pyplot をpltとしてインポートします。
-
- def add_layer(inputs、in_size、out_size、activate = None):
- Weights = tf.Variable(tf.random_normal([in_size,out_size]))#ランダム初期化
- baises = tf.Variable(tf.zeros([1,out_size])+0.1)#ランダムでも構いませんが、0に初期化しないでください。固定値はランダムよりも優れています。
- y = tf.matmul(inputs, Weights) + baises #matmul: 行列の乗算、multipy: 一般的に数量の乗算
- 有効にする場合:
- y = アクティブ化(y)
- yを返す
- __name__ == '__main__'の場合:
- x_data = np.linspace(-1,1,300,dtype=np.float32)[:,np.newaxis]#-1,1の数値を300個作成します。これはこの時点では1次元行列であり、次に2次元行列に変換されます ===[1,2,3]
- noise = np.random.normal(0,0.05,x_data.shape).astype(np.float32) #ノイズは (1,300) 形式、サイズは 0-0.05 です
- y_data = np.square(x_data) - 0.5 + noise # ノイズのある放物線
- fig = plt.figure( 'show_data' )# figure( "data" ) はチャート名を指定します
- ax = fig.add_subplot(111)
- ax.scatter(x_data,y_data)
- plt.ion()
- plt.show()
- xs = tf.placeholder(tf.float32,[None,1]) #外部入力データ
- ys = tf.placeholder(tf.float32,[なし,1])
-
- l1 = add_layer(xs,1,10,アクティブ化=tf.nn.relu)
- 予測 = add_layer(l1,10,1,activate=なし)
-
- 損失 = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))#エラー
- train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)# ステップ 0.1 でのエラーの勾配最適化
-
- sess = tf.Session()
- sess.run( tf.global_variables_initializer())
- iが範囲(1000)内にある場合:
- sess.run(train_step, feed_dict={xs: x_data, ys: y_data})#トレーニング
- i%50 == 0の場合:
- 試す:
- ax.lines.remove(行[0]) は行を削除します。
- 例外を除く:
- 合格
- 予測値 = sess.run(予測、フィードディクショナリ = {xs: x_data})
- 線 = ax.plot(x_data,予測値, "r" ,lw = 3)
- print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))# エラーを表示
- plt.一時停止(2)
- 真の場合:
- plt.一時停止(0.01)
4.TensorBoard全体の構造化表示 A. tf.name_scope("name") を使用して大きな構造を作成し、関数 name="name" を使用して小さな構造を作成します: tf.placeholder(tf.float32,[None,1],name="x_data") B. writer = tf.summary.FileWriter("G:/test/",graph=sess.graph) を使用してグラフファイルを作成します。
C. TessorBoardを使用してこのファイルを実行する ここで注意してください--->>>まず、ファイルを保存した前のディレクトリに移動します--->>次に、このファイルを実行します テンソルボード --logdir=テスト (GIF画像はブロックされています。具体的なインストール手順については「元のリンク」をクリックしてください!) 5.TensorBoard ローカル構造化ディスプレイ A. tf.summary.histogram(layer_name+"Weight",Weights): ヒストグラム表示
B. tf.summary.scalar("Loss",loss): 折れ線グラフは、損失の方向によってネットワーク トレーニングの品質が決まることを示しています。これは非常に重要です。
C. 初期化と操作設定チャート - merge = tf.summary.merge_all()#グラフ 2 をマージ writer = tf.summary.FileWriter( "G:/test/" ,graph=sess.graph)#ファイル 3 に書き込む result = sess.run(merge,feed_dict={xs:x_data,ys:y_data})#パッケージ化されたグラフ merge4 を実行する writer.add_summary(result,i)#ファイルに書き込み、単一ステップの長さは 50
完全なコードと表示効果: - テンソルフローをtfとしてインポートする
- numpyをnpとしてインポートする
- matplotlib.pyplot をpltとしてインポートします。
-
- def add_layer(inputs、in_size、out_size、n_layer = 1、activate = None):
- レイヤー名 = "レイヤー" + str(n_layer)
- tf.name_scope(layer_name)を使用する場合:
- tf.name_scope( "Weights" )を使用する場合:
- Weights = tf.Variable(tf.random_normal([in_size,out_size]), name = "W" )# ランダム初期化
- tf.summary.histogram(レイヤー名+ "重み" ,重み)
- tf.name_scope( "Baises" )を使用する場合:
- baises = tf.Variable(tf.zeros([1,out_size])+0.1, name = "B" )#ランダムでも構いませんが、0に初期化しないでください。固定値はランダムよりも優れています。
- tf.summary.histogram(レイヤー名+ "Baises" ,baises)
- y = tf.matmul(inputs, Weights) + baises #matmul: 行列の乗算、multipy: 一般的に数量の乗算
- 有効にする場合:
- y = アクティブ化(y)
- tf.summary.histogram(レイヤー名+ "y_sum" ,y)
- yを返す
- __name__ == '__main__'の場合:
- x_data = np.linspace(-1,1,300,dtype=np.float32)[:,np.newaxis]#-1,1の数値を300個作成します。これはこの時点では1次元行列であり、次に2次元行列に変換されます ===[1,2,3]
- noise = np.random.normal(0,0.05,x_data.shape).astype(np.float32) #ノイズは (1,300) 形式、サイズは 0-0.05 です
- y_data = np.square(x_data) - 0.5 + noise # ノイズのある放物線
- fig = plt.figure( 'show_data' )# figure( "data" ) はチャート名を指定します
- ax = fig.add_subplot(111)
- ax.scatter(x_data,y_data)
- plt.ion()
- plt.show()
- tf.name_scope( "inputs" )を使用する場合:
- xs = tf.placeholder(tf.float32,[None,1], name = "x_data" ) # 外部入力データ
- ys = tf.placeholder(tf.float32,[None,1],名前= "y_data" )
- l1 = add_layer(xs,1,10,n_layer=1,activate=tf.nn.relu)
- 予測 = add_layer(l1,10,1,n_layer=2,activate=なし)
- tf.name_scope( "loss" )の場合:
- 損失 = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))#エラー
- tf.summary.scalar( "損失" , 損失)
- tf.name_scope( "train_step" )を使用する場合:
- train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)# ステップ 0.1 でのエラーの勾配最適化
-
- sess = tf.Session()
- マージ = tf.summary.merge_all()#マージ
- ライター = tf.summary.FileWriter( "G:/test/" 、グラフ = sess.graph)
- sess.run( tf.global_variables_initializer())
- iが範囲(1000)内にある場合:
- sess.run(train_step, feed_dict={xs: x_data, ys: y_data})#トレーニング
- i%100 == 0の場合:
- result = sess.run(merge,feed_dict={xs:x_data,ys:y_data})#パッケージ化されたチャートのマージを実行する
- writer.add_summary(result,i)#ファイルに書き込み、1ステップの長さは50です
主にMo Fanを参照してください:https://morvanzhou.github.io/ 視覚化に問題があります。この偉大な神を参照してください: http://blog.csdn.net/fengying2016/article/details/54289931 |