ブログを通じて:初心者向けディープラーニング(1)TensorFlowの基本的な開発手順では、データを準備してモデルを構築し(順方向+逆方向)、初心者向けの深層学習(1)TensorFlowの基本的な開発手順では、トレーニングとモデルの
紹介を繰り返します。
TensorFlow開発の基本的な手順は、次のように要約できます。
- テンソルフロー入力ノードを定義します
- 「学習パラメータ」変数を定義します
- 「操作」を定義する
- 最適化機能
- すべての変数を初期化します
- パラメータを最適解に繰り返し更新します
- テストモデル
- モデルを使用
1.テンソルフロー入力ノードを定義する方法
tensorflowで入力ノードを定義する方法はいくつかあります。
- プレースホルダーによって定義されます:通常、この方法を使用します
- 辞書の種類によって定義されます:一般的に、より多くの入力の場合に使用されます。
- 直接定義:めったに使用されない、
(1)プレースホルダーを使用して入力ノードのインスタンスを定義します
ブログ:初心者ディープラーニング(1)TensorFlowの基本的な開発手順:データの準備とモデルの構築(順方向+逆方向)、入力ノードはプレースホルダーによって定義されます:
# X,Y为占位符
X = tf.placeholder("float") # 代表x的输入
Y = tf.placeholder("float") # 代表对应的真实值y
完全なコード:
在这里插入代码片
(2)入力ノードのインスタンスを定義するためのディクショナリタイプを介して
ディクショナリタイプによって入力ノードを定義する方法は、プレースホルダーの方法と似ていますが、それらは一緒に積み上げられます。
#占位符
inputdict = {
'x':tf.placeholder("float"),
'y':tf.placeholder("float")
}
(3)入力ノードを直接定義する例
直接定義とは、定義されたPython変数をOPノードに直接配置して入力操作に参加し、シミュレートされたデータの変数をトレーニング用のモデルに直接配置することです。
2.「学習パラメータ」の変数を定義します
「学習パラメータ」の定義は、入力の定義と非常によく似ており、直接定義と辞書タイプ定義の2つの部分に分かれています。
ディープニューラルネットワークの例には多くのパラメーターがあるため、2番目のパラメーターが一般的に使用されます。
(1)「学習パラメータ」を直接定義する
# 模型参数
W = tf.Variable(tf.random_normal([1]), name="weight") # w初始化为[-1,1]的随机数,形状为一维的数字
b = tf.Variable(tf.zeros([1]), name="bias") # b的初始化是0,形状为一维的数字
# 通过tf.Variable()函数对参数直接定义
(2)辞書の種類ごとに「学習パラメータ」を定義する
# 模型参数
paradict = {
'W':tf.Variable(tf.random_normal([1])) # w初始化为[-1,1]的随机数,形状为一维的数字
'b':tf.Variable(tf.zeros([1])) # b的初始化是0,形状为一维的数字
}
3.「操作」を定義します
「操作」を定義するプロセスは、モデルを確立するコアプロセスであり、モデルのフィッティング効果を直接決定します。
(1)順伝播モデルを定義する
# 创建正向模型
# X,Y为占位符
X = tf.placeholder("float") # 代表x的输入
Y = tf.placeholder("float") # 代表对应的真实值y
# 模型参数
W = tf.Variable(tf.random_normal([1]), name="weight") # w初始化为[-1,1]的随机数,形状为一维的数字
b = tf.Variable(tf.zeros([1]), name="bias") # b的初始化是0,形状为一维的数字
# 前向结构
z = tf.multiply(X, W)+ b # x*w+b
上に示したように(ブログ:初心者向けディープラーニング(1)TensorFlowの基本的な開発手順:データの準備とモデルの構築(順方向+逆方向))使用されるネットワーク構造は非常に単純で、ニューロンは1つだけです。
後で、多層ニューラルネットワーク、畳み込みニューラルネットワーク、リカレントニューラルネットワークなど、ますます複雑なネットワークについて学習します。これらはすべて、さまざまな組み合わせのニューロンで構成されるネットワーク構造です。
(2)損失関数を定義します
損失関数は主に、「出力値」と「真の値」の間の誤差を計算するために使用され、バックプロパゲーションと組み合わせて使用されます。
バックプロパゲーションで最小値(最適解に対応)を見つけるには、関数が導出可能である必要があります。
4.機能を最適化し、ターゲットを最適化します
フォワード構造と損失関数を使用すると、学習パラメーターは最適化関数によって最適化され、このプロセスもバックプロパゲーションで完了します。
PS:
バックプロパゲーションプロセス:フォワードプロパゲーション構造に沿って反対方向にエラーを渡すことです。
5.すべての変数を初期化します
コードは1行しかありませんが、これは非常に重要なリンクです。
セッションが作成された後、最初に行うことはそれを初期化することです。
たとえば、ブログ:初心者ディープラーニング(1)TensorFlowの基本的な開発ステップの反復トレーニングと使用モデル:
# 初始化变量
init = tf.global_variables_initializer() # global_variables_initializer()函数初始化所有变量
注意:
tf.global_variables_initializer()関数を使用して、すべての変数を初期化します。これは、すべての変数とOPが定義された後に完了する必要があります。この方法でのみ、定義されたコンテンツを有効にすることができます。そうでない場合、初期化後に定義された変数とOPは、セッションでの実行を使用して計算できません。
6.パラメータを最適解に繰り返し更新します
反復トレーニングの過程で、完了するためのセッションを確立する必要があります。通常、with構文を使用します。これは、セッションの終了後に閉じることができます。
たとえば、ブログ:初心者ディープラーニング(1)TensorFlowの基本的な開発ステップの反復トレーニングと使用モデル:
with tf.Session() as sess:
sess.run(init) # 通过sess.进行网络节点的运算
plotdata = {
"batchsize":[],"loss":[]} # 存放批次值和损失值
モデル内のノードを実行を通して実行セッション中。同じことを除いて、反復トレーニングプロセスにおいて真であるOPことの最適化された動作が実行中に配置され、そしてサイクル数は外側の層に添加する必要があります。
たとえば、ブログ:初心者ディープラーニング(1)TensorFlowの基本的な開発ステップの反復トレーニングと使用モデル:
# 向模型输入数据
for epoch in range(training_epochs):
for (x, y) in zip(train_X, train_Y):
sess.run(optimizer, feed_dict={
X: x, Y: y}) # 通过feed机制将真实数据灌到占位符(第二步创建模型时)对应的位置
実際の使用プロセスでは、反復トレーニング、つまり、トレーニングのために一定量のデータが取得されてネットワークに配置されるたびに、MINIBATCHと呼ばれる概念が導入されます。
7.テストモデル
テストモデルはニューラルネットワークのコア部分ではありません。つまり、モデルの精度またはエラー率は、モデルの品質を表すために計算されます。
たとえば、ブログ:初心者ディープラーニング(1)TensorFlowの基本的な開発ステップの反復トレーニングと使用モデル:
print ("cost=", sess.run(cost, feed_dict={
X: train_X, Y: train_Y}), "W=", sess.run(W), "b=", sess.run(b))
8.モデルを使用します
使用モデルはテストモデルに似ています。つまり、損失値ノードを出力ノードに置き換えることができます。
たとえば、ブログ:初心者ディープラーニング(1)TensorFlowの基本的な開発ステップの反復トレーニングと使用モデル:
print ("x=0.2,z=", sess.run(z, feed_dict={
X: 0.2}))