Tensorflow-ニューラルネットワークの構築

1.はじめに

今回は、コードを使用して、ニューラルレイヤーの追加、エラーの計算、トレーニングステップ、学習中かどうかの判断など、完全なニューラルネットワークを構築する方法を示します。

2.ニューラルネットワークを構築する

2.1。インポートモジュール

import tensorflow as tf
import numpy as np

2.2。ニューラルレイヤーを追加する関数を作成する

def add_layer(inputs, in_size, out_size, activation_function=None):
    Weights = tf.Variable(tf.random_normal([in_size, out_size]))   #    [in_size, out_size]: 输出张量的形状 mean: 正态分布的均值,默认为0,stddev: 正态分布的标准差,默认为1.0
    biases = tf.Variable(tf.zeros([1,out_size])+0.1)
    Wx_plus_b = tf.matmul(inputs,Weights) + biases
    if activation_function is None:
        outputs = Wx_plus_b
    else:
        outputs = activation_function(Wx_plus_b)
    return outputs

2.3。データの構築

必要なデータを作成します。ここで、x_dataとy_dataは単項2次関数に厳密には関連していません。これは、ノイズを追加したため、実際の状況により近いものになります。

x_data = np.linspace(-1,1,300)[:,np.newaxis]    #300行1列
noise = np.random.normal(0,0.05,x_data.shape)      #np.random.normal参数:均值、方差、输出的形状
y_data = np.square(x_data) - 0.5 + noise   #np.square(x):计算数组各元素的平方

プレースホルダーを使用して、必要なニューラルネットワークの入力を定義します。tf.placeholder()はプレースホルダーです。ここにはどれもありません。入力が1つだけの機能であるため、入力がいくつあっても、ここでは1です。

xs = tf.placeholder(tf.float32,[None,1])   #此函数可以理解为形参,用于定义过程,在执行的时候再赋具体的值
ys = tf.placeholder(tf.float32,[None,1])    #[None, 1]表示列是1,行不定

次に、神経層の定義を開始できます。通常、ニューラルレイヤーには、入力レイヤー、非表示レイヤー、出力レイヤーが含まれます。ここでの入力層には属性が1つしかないため、入力は1つだけです。非表示層を自分で想定できます。ここでは、非表示層に10個のニューロンがあると想定しています。出力層と入力層の構造は同じであるため、出力層も1階のみです。したがって、1つの入力層、10の非表示層、および1つの出力層を持つニューラルネットワークを構築します。

2.4。ネットワークを構築する

次に、前のadd_layer()関数を使用して、ここではTensorflowに付属する励起関数tf.nn.reluを使用して、非表示層の定義を開始します。

次に、出力レイヤーを定義します。このときの入力は、隠れ層l1の出力であり、入力は10層(隠れ層の出力層)であり、出力は1層です。

#搭建网络
l1 = add_layer(xs,1,10,activation_function=tf.nn.relu)
prediction = add_layer(l1,10,1,activation_function=None)

予測値と真の値の間の誤差を計算し、2つの差の2乗を合計して平均します。

loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1]))   

次に、これは重要なステップです。機械学習を使用して精度を向上させる方法です。tf.train.GradientDescentOptimizer()の値は通常1より小さく、ここでは0.1です。これは、エラーの損失を最小限に抑えるための0.1の効率を表します。

train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)  #对所有步骤中的所有变量使用恒定的学习率

変数を使用する場合、初期化する必要があります。これは必須です

init = tf.global_variables_initializer()

セッションを定義し、セッションを使用して初期化初期化手順を実行します。(注:tensorflowでは、session.run()のみが定義した操作を実行します)。

sess = tf.Session()
sess.run(init)

2.5。トレーニング

次に、機械に学習を開始させます。

たとえば、ここでは、機械に1000回学習させます。機械学習の内容はtrain_stepで、Sessionを使用して各トレーニングのデータを実行し、ニューラルネットワークの予測精度を徐々に向上させます。(注:プレースホルダーを操作に使用する場合、入力を指定するにはディクショナリーfeed_dictが必要です。)

for i in range(1000):
    sess.run(train_step, feed_dict={xs:x_data,ys:y_data})
    if i%50==0:
        print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))

ここに画像の説明を挿入

227件のオリジナル記事を公開 633 件を賞賛 30,000回以上の閲覧

おすすめ

転載: blog.csdn.net/weixin_37763870/article/details/105512017