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}))