実際、編集者はずっと前にそのような列を開きたいと思っていました。結局のところ、TensorFlow2.xは長い間リリースされていました。1.xと比較すると、大幅に変更されています。TensorFlowはバージョン2.4.0に到達したので、要約して新しい2.xシリーズへの適応を開始したいと思います。この記事はコラム全体の冒頭で、主にTensorFlow2.xバージョンを学習して使用したい理由について説明しています。これで、TensorFlow2.xの学習の旅を始めようとしています。「TensorFlow2.xを一緒に学ぼう」の列に従って、関連するコンテンツのロックを解除してください〜
目次
1.1 TensorFlow1.xバージョンで発生した問題の概要
1.2.2 TensorFlow1.xでseq2seqを参照する
1.3ソースコードを変更し、RNNモデルをカスタマイズし、seq2seqアルゴリズムを実装します
TensorFlow1.xに基づくプログラミング
1.1 TensorFlow1.xバージョンで発生した問題の概要
私のネイティブWindows環境のTensorFlowはバージョン1.12.0です。
通常、問題が発生するまでローカルでコードを作成できます。GPUの問題のため、ローカルで記述されたニューラルネットワークコードの実行速度が遅く(ラップトップのグラフィックカードはGTX1050Tiです)、サーバーによって設定されたサーバーに送信する必要があります。グラフィックカードはRTX3070です。サーバー環境を構成するときに、TensorFlow 2.xのバージョンが構成されたため、以前に作成したコードがサーバーで実行されませんでした(ご存知のとおり、TensorFlowはラージバージョンの更新についても言及していません。多くの小さなバージョンのアップデートはコードの動作に影響を与えるため)、1.xから2.xへの変更があります。
TensorFlow1.xでの1.2seq2seqモデル
1.2.1seq2seqモデルの簡単な説明
上記のローカルコードは、使用されているseq2seqモデルです。インテリジェントな質問応答システムをトレーニングしたいので、非常に人気のあるseq2seqモデルを選択してシステムを構築しました。seq2seqは、一種のエンコーダーデコーダー構造に属しています。基本的な考え方は、2つのRNNを使用することです。1つはエンコーダーとして、もう1つはデコーダーとしてRNNを使用します。エンコーダーは、入力シーケンスを指定された長さのベクトルに圧縮する役割を果たします。このベクトルは、シーケンスのセマンティクスと見なすことができます。このプロセスは、エンコードと呼ばれます。セマンティックベクトルを取得する最も簡単な方法は、最後の入力の非表示状態をセマンティックベクトルとして直接使用することです。最後の非表示状態で変換を実行してセマンティックベクトルを取得することも、すべてに対して変換を実行することもできます。セマンティクス変数を取得するための入力シーケンスの非表示状態。デコーダーは、セマンティックベクトルに基づいて指定されたシーケンスを生成する役割を果たします。このプロセスは、デコードとも呼ばれます。最も簡単な方法は、エンコーダーによって初期状態として取得されたセマンティック変数をデコーダーのRNNに入力して、出力シーケンスを取得することです。前の瞬間の出力が現在の入力として使用され、セマンティックベクトルは操作に参加するための初期状態としてのみ使用され、後続の操作はセマンティックとは関係がないことがわかります。ベクター。別のデコーダ処理方法があります。つまり、セマンティックベクトルは常にシーケンスの操作に関与します。前の瞬間の出力は現在の瞬間の入力として引き続き使用されますが、セマンティックベクトルはすべての瞬間の計算に参加します。
1.2.2 TensorFlow1.xでseq2seqを参照する
エディターのネイティブTensorFlowバージョン(1.12.0)に基づいて、seq2seqモデルは次の方法で直接参照できます。
from tensorflow.contrib.legacy_seq2seq.python.ops import seq2seq
上記の参照から、seq2seqモデルはcontribライブラリにあることがわかりますが、contribライブラリはTensorFlow 2.xの後に放棄されました。元々contribに属していた関数は、その関数に従って対応するモジュールに分散されていました。この場合、新しいサーバーで元の1.xコードを使用する場合、ここで直接引用することはできません。今文書を特に参照して、内部のアドオンを入力しseq2seqののcontribモジュールでTensorFlow2.x中央平野は、クリックすることができ、ここで、GitHubのアドレス、クリックしてくださいここに。当時の対応についてお話させていただきますが、結局、seq2seqモジュールがアドオンになっていることを知りませんでした。
1.3ソースコードを変更し、RNNモデルをカスタマイズし、seq2seqアルゴリズムを実装します
そうです、上記のタイトルは私が次に行うことです.seq2seqのソースコードを分析したところ、次のように、その中のほとんどのライブラリがTensorFlow2.xでまだ利用可能であることがわかりました。
from tensorflow.python.framework import dtypes
from tensorflow.python.framework import ops
from tensorflow.python.ops import array_ops
from tensorflow.python.ops import control_flow_ops
from tensorflow.python.ops import embedding_ops
from tensorflow.python.ops import math_ops
from tensorflow.python.ops import nn_ops
from tensorflow.python.ops import rnn
from tensorflow.python.ops import rnn_cell_impl
from tensorflow.python.ops import variable_scope
from tensorflow.python.util import nest
もちろん、次のような使用できないものもあります。
from tensorflow.contrib.rnn.python.ops import core_rnn_cell
この場合、core_rnn_cellのソースコードを変更するだけでよく、基本的に現在の環境で以前のコードを実行できます。そこで、core_rnn_cellのソースコードをコピーして、新しいcore_rnn_cell.pyファイルを作成しました。
そして、seq2seqモデルで、新しいcore_rnn_cell.pyファイルを呼び出します。
from seq2seq import core_rnn_cell
すべての準備が整った後、サーバーで再度テストしたところ、元のコードを実行できることがわかりました。もちろん、この方法を使用することはお勧めしません。結局のところ、通常のTensorFlow 2.xではないように感じます。変更プロセス全体は単純に見えますが、実際にはかなりの時間がかかりました。TensorFlowはついに老人に再び「嫌な」ものになりましたが、TensorFlow1.xの混沌としたレイヤーとnnと比較すると、TensorFlow2.xはすべてのレイヤーレベル関数の単純な実装をtf.nnに、複雑な実装をtf.kerasに配置しています。 。レイヤー。そういうわけでそのようなコラムおよびそのような記事があります。この記事は、主にTensorFlow 2.xを紹介として学習し、他の人を引き付ける役割を果たすためのオープニングの序文と見なすことができます。TensorFlow2.xにも興味がある場合は、TensorFlow2の学習の旅を始めてください。 .x with me.〜
さて、この記事は基本的に終わりました。読者が好奇心をそそられるのを防ぐために、記事に記載されている1.xバージョンの変更されたコードがGitHubにアップロードされました。興味のある友人はビューでここをクリックしてください。このプロセスでどのような問題が発生しましたか。メッセージを残してください。すべての問題が発生したかどうかを確認させてください。