tensorflow互換処理tensorflow.compat.v1

https://www.wandouip.com/t5i183316/

 

入門

もともと作品を引用するだけでなく、ここで再び参照します。これは、Appleについてです。Appleはスウィフトの新しい開発言語をリリースし、効果に、非常に多くの良い機能がピットに非常に多くのファッショナブルなプログラマが学ぶために、あります。意外にも、一般的な体操の心のハードワークと実践の期間の後、使用スウィフトが開発を行うためにことがわかった、スウィフトは学ぶだけでなく、Swift2、Swift3、Swift4を学ぶだけではなく...
そして私は、この作品は非常に普遍的である見つけ、そうではないだけで、アップル、今日のTensorFlow 2.0ビットこの傾向。私は新しいバージョンのソフトウェアを読者に直面する特別なコース続編を書かなければならなかったことを機械学習を始めました。
実際、このような最も革新的な企業は、新しいエキサイティングな機能をもたらす一方で、一方の学習の高コストオフではありません。

「AIの専門家へのボイラー労働者から」一品で、非常に詳細な紹介を行うための機械学習の基本的な概念となっています。そう前置き、ここでは、ささやきを保存TensorFlow2.0から直接話します。
もちろん、知識の移行を2.xにするTensorFlow 1.xから学ぶために読んで直接あなたがTensorFlow 1.xのに精通している場合は、このシリーズを読んで、あるいはない場合でも。
あなたは機械学習の概念を理解していない場合は、AIの開発を指示しようとしているが、TensorFlow 2.0を学び始める、それはより困難になることがあります。TensorFlowだけのツール。いいえスキルは、単なるツールで、あなたはおそらく旅に乗り出すことはできません。

インストール

この記事の執筆時点で、TensorFlow 2.0が正式にリリースされていません。ピップ倉庫はまだ安定したバージョン1.13です。あなたがTensorFlow 2.0の学習を開始したいのであれば、インストールするバージョン番号を指定する必要があります。また、Python2シリーズは、実証するのpython3コードを使用して2020年1月には、この記事の例の公式のメンテナンスを停止しますので。

$ pip3 install tensorflow==2.0.0-alpha0

(注:上記の$ MAC / Linuxのプロンプトで、Windowsを使用している場合、あなたはこのように> C :. \ Users \ユーザー管理者への迅速類似したが表示されます)

あなたはGPUコンピューティングを使用したい場合は、いくつかの問題を準備するために、事前にインストールされ、このドキュメントを参照してください。https://www.tensorflow.org/install/gpuこれは、CUDA / cuDNN他のコンピューティング・プラットフォームのツールキットをインストールすることです。前記CUDAは、直接インストールするインストーラを使用することができます。あなたはCUDAが比較的容易になります同じディレクトリに置かれ、その後TensorFlowをコンパイルする予定がない場合cuDNNは、圧縮されています。
ここで注意、彼らはTensorFlowをコンパイルしない限り、そうでなければ、CUDA 10.0の公式2.0.0-alpha0使用しているため、コンパイルされたバージョン、ではないに高く、低CUDA 10.0のバージョンを使用します。
加算TensorFlowのインストールでは、次のコマンドを使用します。

$ pip3 install tensorflow-gpu==2.0.0-alpha0

インストールが完了したら、あなたはPythonの対話モードはTensorFlow作業を確認するためにすることができます:

$ python3
Python 3.7.2 (default, Feb 13 2019, 13:59:29) 
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'2.0.0-alpha0'
>>> 

本論文では、いくつかのサードパーティのPythonの拡張ライブラリで使用されるだけでなく、非常によく一緒に提案されているインストールの機械学習に使用されます。

$ pip3 install numpy matplotlib pillow pandas seaborn sklearn

最初の例:価格が予想

この例では、ソースからの「kotelshchikからAIエキスパートに」シリーズ2率予測を行うための最も簡単な線形関数を使用して、。オリジナルTensorFlow 1.xの/ Pythonの2.xのコードは次のとおりです。

#!/usr/bin/env python 
# -*- coding=UTF-8 -*-

#本代码在mac电脑,python2.7环境测试通过
#第一行是mac/Linux系统脚本程序的标志,表示从环境参量中寻找python程序解释器来执行本脚本
#省去了每次在命令行使用 python <脚本名> 这样的执行方式
#第二行表示本脚本文本文件存盘使用的代码是utf-8,并且字符串使用的编码也是utf-8,
#在本源码中,这一点其实没有什么区别,但如果需要中文输出的时候,这一行就必须要加了。

#引入TensorFlow库
import tensorflow as tf
#引入数值计算库
import numpy as np

#使用 NumPy 生成假数据集x,代表房间的平米数,这里的取值范围是0-1的浮点数,
#原因请看正文中的说明,属于是“规范化”之后的数据
# 生成的数据共100个,式样是100行,每行1个数据
x = np.float32(np.random.rand(100,1))
#我们假设每平米0.5万元,基础费用0.7万,这个数值也是规范化之后的,仅供示例
#最终运行的结果,应当求出来0.5/0.7这两个值代表计算成功
#计算最终房价y,x和y一同当做我们的样本数据
# np.dot的意思就是向量x * 0.5
y = np.dot(x,0.5) + 0.7
#---------------------------------数据集准备完成
#以下使用TensorFlow构建数学模型,在这个过程中,
#直到调用.run之前,实际上都是构造模型,而没有真正的运行。
#这跟上面的numpy库每一次都是真正执行是截然不同的区别
# 请参考正文,我们假定房价的公式为:y=a*x+b

#tf.Variable是在TensorFlow中定义一个变量的意思
#我们这里简单起见,人为给a/b两个初始值,都是0.3,注意这也是相当于规范化之后的数值
b = tf.Variable(np.float32(0.3))
a = tf.Variable(np.float32(0.3))

#这是定义主要的数学模型,模型来自于上面的公式
#注意这里必须使用tf的公式,这样的公式才是模型
#上面使用np的是直接计算,而不是定义模型
# TensorFlow的函数名基本就是完整英文,你应当能读懂
y_value = tf.multiply(x,a) + b

# 这里是代价函数,同我们文中所讲的唯一区别是用平方来取代求绝对值,
#目标都是为了得到一个正数值,功能完全相同,
#平方计算起来会更快更容易,这种方式也称为“方差“
loss = tf.reduce_mean(tf.square(y_value - y))
# TensorFlow内置的梯度下降算法,每步长0.5
optimizer = tf.train.GradientDescentOptimizer(0.5)
# 代价函数值最小化的时候,代表求得解
train = optimizer.minimize(loss)

# 初始化所有变量,也就是上面定义的a/b两个变量
init = tf.global_variables_initializer()

#启动图
sess = tf.Session()
#真正的执行初始化变量,还是老话,上面只是定义模型,并没有真正开始执行
sess.run(init)

#重复梯度下降200次,每隔5次打印一次结果
for step in xrange(0, 200):
    sess.run(train) 
    if step % 5 == 0:
        print step, sess.run(loss),sess.run(a), sess.run(b)

コードは概念が、全く問題なかった場合は、詳細な説明を参照する元に実行されないようにすることを期待して、オリジナルのノートを保持します。
numpyのは、線形関数を用いて生成されたサンプルのセットを生成するために、サンプルのセットを使用します。これらのサンプルは、それによって、未知の量(重量)及びオフセット(バイアス)値の線形関数を求める、TensorFlow学習を使用しています。
元のテキストは、単に「機械学習」の基本的な原理を説明するために開始するために、この例では、実用的な価値を持っていない、と言われてきました。

互換2.0 V1は、コード1.1に従うようにパケットを使用します

2.0は、既存の1.xのコードとの互換性のためtensorflow.compat.v1コードパッケージを提供TensorFlow、あなたはほとんど変更せずに実行しないことができます。それはTensorFlow直接参照コードの多くが含まれたり、独自のPython拡張パッケージを作成するためのcontrib図書館コミュニティは、あなたはこのモードを使用することはできません。TensorFlow 2.0はまた少し後悔作るのcontribリポジトリを、削除されました。
既存のコードをアップグレードするには、このメソッドを使用して、単に元のプログラムがTensorFlow引用始まっ必要があります。

import tensorflow as tf

それは通常次の2行として使用し続けることができる置き換えます。

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

変更せずに他のコード。個人的に私は使用が安定しており、コードをリファクタリングしていない場合は、このように最初の選択肢とみなされることと思います。

自動的にコード1.xでは2.0に移行する移行ツールを使用します

自動的にコード1.1 2.0コードを変換するコマンドラインツールでTensorFlow 2.0マイグレーション。(私たちのファイル名はfirst-tf.pyであると仮定して)次のようにツールを使用することです。

tf_upgrade_v2 --infile first-tf.py --outfile first-tf-v2.py

また、全体のアップグレードプログラムフォルダを行うことができます移行ツールは、ヘルプドキュメントツール自体を参照してください。
本質的には、アップグレードするために、コード移行ツールを使用して、また、コードのTensorFlow 2.0環境1.1を実行し、互換性パックtensorflow.compat.v1を提供するために使用されます。新しいコードは、あなたが参照コントラストのために自動変換した後、ここに掲載されています。

#引入TensorFlow库
import tensorflow as tf
#import tensorflow.compat.v1 as tf
tf.compat.v1.disable_v2_behavior()

#引入数值计算库
import numpy as np

#使用 NumPy 生成假数据集x,代表房间的平米数,这里的取值范围是0-1的浮点数,
#原因请看正文中的说明,属于是“规范化”之后的数据
# 生成的数据共100个,式样是100行,每行1个数据
x = np.float32(np.random.rand(100,1))
#我们假设每平米0.5万元,基础费用0.7万,这个数值也是规范化之后的,仅供示例
#最终运行的结果,应当求出来0.5/0.7这两个值代表计算成功
#计算最终房价y,x和y一同当做我们的样本数据
# np.dot的意思就是向量x * 0.5
y = np.dot(x,0.5) + 0.7
#---------------------------------数据集准备完成
#以下使用TensorFlow构建数学模型,在这个过程中,
#直到调用.run之前,实际上都是构造模型,而没有真正的运行。
#这跟上面的numpy库每一次都是真正执行是截然不同的区别
# 请参考正文,我们假定房价的公式为:y=a*x+b

#tf.Variable是在TensorFlow中定义一个变量的意思
#我们这里简单起见,人为给a/b两个初始值,都是0.3,注意这也是相当于规范化之后的数值
b = tf.Variable(np.float32(0.3))
a = tf.Variable(np.float32(0.3))

#这是定义主要的数学模型,模型来自于上面的公式
#注意这里必须使用tf的公式,这样的公式才是模型
#上面使用np的是直接计算,而不是定义模型
# TensorFlow的函数名基本就是完整英文,你应当能读懂
y_value = tf.multiply(x,a) + b

# 这里是代价函数,同我们文中所讲的唯一区别是用平方来取代求绝对值,
#目标都是为了得到一个正数值,功能完全相同,
#平方计算起来会更快更容易,这种方式也称为“方差“
loss = tf.reduce_mean(input_tensor=tf.square(y_value - y))
# TensorFlow内置的梯度下降算法,每步长0.5
optimizer = tf.compat.v1.train.GradientDescentOptimizer(0.5)
# 代价函数值最小化的时候,代表求得解
train = optimizer.minimize(loss)

# 初始化所有变量,也就是上面定义的a/b两个变量
init = tf.compat.v1.global_variables_initializer()

#启动图
sess = tf.compat.v1.Session()
#真正的执行初始化变量,还是老话,上面只是定义模型,并没有真正开始执行
sess.run(init)

#重复梯度下降200次,每隔5次打印一次结果
for step in range(0, 200):
    sess.run(train) 
    if step % 5 == 0:
        print(step, sess.run(loss),sess.run(a), sess.run(b))

変換後は、予約のコメントセクションは、プログラマが保証することができ、文書を交換するためのコードを使用したい、完璧なコードになります。2.0すべてのクラスまたはメソッドが変更され、対応する変換ツールは、例えば、tensorflow.compat.v1代わりクラスまたはメソッドで使用されます。

optimizer = tf.compat.v1.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
init = tf.compat.v1.global_variables_initializer()

したがって、本質的に、本実施の形態では、パケットなどの代替tensorflowのtensorflow.compat.v1パケットを用いて第一の方法は、同一の方法です。

TensorFlowネイティブ2.0プログラムを書きます

2.0は、新しいバージョンのコードのために元のコードを再構築TensorFlow関連する特徴を学習コースの進化の推奨される方法は、正しい方法です。公正を期すため、結局、ほとんどのシステムは、より多くの機能を提供し、しきい値を減少させるためにアップグレードされます。TensorFlow 2.0も大幅に使用するための閾値を低下させます。バージョン1.xよりも仕事の大半は、完了するために、コードの少ない量を使用することができます。
1.1と2.0 TensorFlowの重要な違いを初めて目:

  • APIレベルのクラスでは、方法は、大幅な変更を加えた、必要が使用されているより身近になりました
  • セッションはSession.runまで待つ必要なしに、各コマンドを直接実行、メカニズムをキャンセル
  • 廃止セッションメカニズム、数学的モデルの元の定義のため、代わりに書かれたPythonの関数を使用します。オリジナルfeed_dictとtf.placeholderは、入力部の機能となり、元のフェッチは、関数の戻り値となります。
  • 使いやすく抽象化の元TensorFlow API高度を使用してKerasモデルシステム、
  • オリジナルのトレーニングサイクルを置き換えるためにtf.keras.Model.fitを使用してください。

通常の状況下では、最後のtf.keras.Model.fitが大幅にコードのトレーニングサイクルの量を減らすことができます。しかし、このケースでは、我々は現実の世界の例をシミュレートし、このような状況でkerasが最適化されていない、適用されません。そのため、彼らはこのような場合には(実際には、使用してくださいすることも可能ですが、モデルをカスタマイズしたい、作業負荷がより価値がある)tf.keras.Model.fitを使用することはできません。したがって、この場合には、まだ独自のトレーニングサイクルを記述する必要があります。そして、API 2.0の変化、より複雑なコードため。しかし、私を信じて、より正式な申請、ニューラルネットワークの使用、および他の一般的に使用される畳み込みアルゴリズムまで待って、コードを大幅に簡素化されます。
次のようにネイティブコードのコードを使用してTensorFlow 2.0です。

#!/usr/bin/env python3
#上面一行改为使用python3解释本代码

#引入python新版本的语言特征
from __future__ import absolute_import, division, print_function

#引入TensorFlow库,版本2.0
import tensorflow as tf

#引入数值计算库
import numpy as np

#使用 NumPy 生成假数据集x,代表房间的平米数,这里的取值范围是0-1的浮点数,
#原因请看正文中的说明,属于是“规范化”之后的数据
# 生成的数据共100个,式样是100行,每行1个数据
x = np.float32(np.random.rand(100,1))
#我们假设每平米0.5万元,基础费用0.7万,这个数值也是规范化之后的,仅供示例
#最终运行的结果,应当求出来0.5/0.7这两个值代表计算成功
#计算最终房价y,x和y一同当做我们的样本数据
y = np.dot(x,0.5) + 0.7
#---------------------------------数据集准备完成
# 请参考正文,我们假定房价的公式为:y=a*x+b
#定义tensorflow变量,a是权重,b是偏移
b = tf.Variable(np.float32(0.3))
a = tf.Variable(np.float32(0.3))

#以上代码基本同tensorflow1.x版本一致
#以下有了区别
#使用python语言定义数学模型,模型来自于上面的公式
#上面使用np的是直接计算得到训练样本,而不是定义模型
#模型中并非必须使用tensorflow的计算函数来代替python的乘法运算
@tf.function
def model(x):
        return a*x+b

#定义代价函数,也是python函数
def loss(predicted_y, desired_y):
    return tf.reduce_sum(tf.square(predicted_y - desired_y))

# TensorFlow内置Adam算法,每步长0.1
optimizer = tf.optimizers.Adam(0.1)
# 还可以选用TensorFlow内置SGD(随机最速下降)算法,每步长0.001
#不同算法要使用适当的步长,步长过大会导致模型无法收敛
#optimizer = tf.optimizers.SGD(0.001)

#重复梯度下降200次,每隔5次打印一次结果
for step in range(0, 200):
        with tf.GradientTape() as t:
                outputs = model(x)  #进行一次计算
                current_loss = loss(outputs, y) #得到当前损失值
                grads = t.gradient(current_loss, [a, b])    #调整模型中的权重、偏移值
                optimizer.apply_gradients(zip(grads,[a, b]))    #调整之后的值代回到模型
        if step % 5 == 0:   #每5次迭代显示一次结果
                print( "Step:%d loss:%%%2.5f weight:%2.7f bias:%2.7f " % 
                        (step,current_loss.numpy(), a.numpy(), b.numpy()))

アップグレード中にプログラムを変更し、特別な処理をした、ソースコード内に残るコメントを使用。私は解散するよりも、この方法は、より完全な説明を選ぶことができます感じています。
最後に、新しいプログラムの実施の結果を見てみましょう。

Step:0 loss:%25.78244 weight:0.4000000 bias:0.4000000 
Step:5 loss:%2.71975 weight:0.7611420 bias:0.7740188 
Step:10 loss:%3.09600 weight:0.6725605 bias:0.7224629 
Step:15 loss:%0.87834 weight:0.4931822 bias:0.5800986 
Step:20 loss:%1.24737 weight:0.4960071 bias:0.6186275 
Step:25 loss:%0.22444 weight:0.5730734 bias:0.7264798 
Step:30 loss:%0.47145 weight:0.5464076 bias:0.7252067 
Step:35 loss:%0.09156 weight:0.4736322 bias:0.6712209 
Step:40 loss:%0.14845 weight:0.4771673 bias:0.6866464 
Step:45 loss:%0.06199 weight:0.5101752 bias:0.7255269 
Step:50 loss:%0.03108 weight:0.4946054 bias:0.7112849 
Step:55 loss:%0.04115 weight:0.4770990 bias:0.6918764 
Step:60 loss:%0.00145 weight:0.4950625 bias:0.7060429 
Step:65 loss:%0.01781 weight:0.5029647 bias:0.7096580 
Step:70 loss:%0.00211 weight:0.4934593 bias:0.6963260 
Step:75 loss:%0.00298 weight:0.4983235 bias:0.6982682 
Step:80 loss:%0.00345 weight:0.5049748 bias:0.7031375 
Step:85 loss:%0.00004 weight:0.5001755 bias:0.6976562 
Step:90 loss:%0.00102 weight:0.5002422 bias:0.6978318 
Step:95 loss:%0.00065 weight:0.5029225 bias:0.7010939 
Step:100 loss:%0.00001 weight:0.5000774 bias:0.6990223 
Step:105 loss:%0.00021 weight:0.4996552 bias:0.6993059 
Step:110 loss:%0.00015 weight:0.5007215 bias:0.7008768 
Step:115 loss:%0.00000 weight:0.4993480 bias:0.6997767 
Step:120 loss:%0.00003 weight:0.4995552 bias:0.7000407 
Step:125 loss:%0.00004 weight:0.5001000 bias:0.7004969 
Step:130 loss:%0.00001 weight:0.4995880 bias:0.6998325 
Step:135 loss:%0.00000 weight:0.4999941 bias:0.7000810 
Step:140 loss:%0.00001 weight:0.5001197 bias:0.7000892 
Step:145 loss:%0.00000 weight:0.4999250 bias:0.6998329 
Step:150 loss:%0.00000 weight:0.5001498 bias:0.7000451 
Step:155 loss:%0.00000 weight:0.5000388 bias:0.6999565 
Step:160 loss:%0.00000 weight:0.4999948 bias:0.6999494 
Step:165 loss:%0.00000 weight:0.5000526 bias:0.7000424 
Step:170 loss:%0.00000 weight:0.4999576 bias:0.6999717 
Step:175 loss:%0.00000 weight:0.4999971 bias:0.7000214 
Step:180 loss:%0.00000 weight:0.4999900 bias:0.7000131 
Step:185 loss:%0.00000 weight:0.4999775 bias:0.6999928 
Step:190 loss:%0.00000 weight:0.5000094 bias:0.7000152 
Step:195 loss:%0.00000 weight:0.4999923 bias:0.6999906 

モデルを学習した後、その結果は、当社の事前設定値に非常に近いです。
プログラムはまた、ランダム速い降下アルゴリズム(SGD)を使用して検討することができ、あなたは、シールド上の現在のアダム・アルゴリズムのコメント記号を入れてノートを開くことができますしようとするSGDアルゴリズムをシールド。データセットの点で、本実施形態では、SGDが低下同じサイクル数下で、精度が低い解決され、以下のステップを必要とします。この例では、それを見ることができる、アダムは明らかに、より効率的なアルゴリズムです。TensorFlowのサポートでは、データと数理モデルの同じセットのため、アルゴリズムの変更を学ぶことは非常に簡単になります。

(続き...)

関連記事

入門

もともと作品を引用するだけでなく、ここで再び参照します。これは、Appleについてです。Appleはスウィフトの新しい開発言語をリリースし、効果に、非常に多くの良い機能がピットに非常に多くのファッショナブルなプログラマが学ぶために、あります。意外にも、一般的な体操の心のハードワークと実践の期間の後、使用スウィフトが開発を行うためにことがわかった、スウィフトは学ぶだけでなく、Swift2、Swift3、Swift4を学ぶだけではなく...
そして私は、この作品は非常に普遍的である見つけ、そうではないだけで、アップル、今日のTensorFlow 2.0ビットこの傾向。私は新しいバージョンのソフトウェアを読者に直面する特別なコース続編を書かなければならなかったことを機械学習を始めました。
実際、このような最も革新的な企業は、新しいエキサイティングな機能をもたらす一方で、一方の学習の高コストオフではありません。

「AIの専門家へのボイラー労働者から」一品で、非常に詳細な紹介を行うための機械学習の基本的な概念となっています。そう前置き、ここでは、ささやきを保存TensorFlow2.0から直接話します。
もちろん、知識の移行を2.xにするTensorFlow 1.xから学ぶために読んで直接あなたがTensorFlow 1.xのに精通している場合は、このシリーズを読んで、あるいはない場合でも。
あなたは機械学習の概念を理解していない場合は、AIの開発を指示しようとしているが、TensorFlow 2.0を学び始める、それはより困難になることがあります。TensorFlowだけのツール。いいえスキルは、単なるツールで、あなたはおそらく旅に乗り出すことはできません。

インストール

この記事の執筆時点で、TensorFlow 2.0が正式にリリースされていません。ピップ倉庫はまだ安定したバージョン1.13です。あなたがTensorFlow 2.0の学習を開始したいのであれば、インストールするバージョン番号を指定する必要があります。また、Python2シリーズは、実証するのpython3コードを使用して2020年1月には、この記事の例の公式のメンテナンスを停止しますので。

$ pip3 install tensorflow==2.0.0-alpha0

(注:上記の$ MAC / Linuxのプロンプトで、Windowsを使用している場合、あなたはこのように> C :. \ Users \ユーザー管理者への迅速類似したが表示されます)

あなたはGPUコンピューティングを使用したい場合は、いくつかの問題を準備するために、事前にインストールされ、このドキュメントを参照してください。https://www.tensorflow.org/install/gpuこれは、CUDA / cuDNN他のコンピューティング・プラットフォームのツールキットをインストールすることです。前記CUDAは、直接インストールするインストーラを使用することができます。あなたはCUDAが比較的容易になります同じディレクトリに置かれ、その後TensorFlowをコンパイルする予定がない場合cuDNNは、圧縮されています。
ここで注意、彼らはTensorFlowをコンパイルしない限り、そうでなければ、CUDA 10.0の公式2.0.0-alpha0使用しているため、コンパイルされたバージョン、ではないに高く、低CUDA 10.0のバージョンを使用します。
加算TensorFlowのインストールでは、次のコマンドを使用します。

$ pip3 install tensorflow-gpu==2.0.0-alpha0

インストールが完了したら、あなたはPythonの対話モードはTensorFlow作業を確認するためにすることができます:

$ python3
Python 3.7.2 (default, Feb 13 2019, 13:59:29) 
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'2.0.0-alpha0'
>>> 

本論文では、いくつかのサードパーティのPythonの拡張ライブラリで使用されるだけでなく、非常によく一緒に提案されているインストールの機械学習に使用されます。

$ pip3 install numpy matplotlib pillow pandas seaborn sklearn

最初の例:価格が予想

この例では、ソースからの「kotelshchikからAIエキスパートに」シリーズ2率予測を行うための最も簡単な線形関数を使用して、。オリジナルTensorFlow 1.xの/ Pythonの2.xのコードは次のとおりです。

#!/usr/bin/env python 
# -*- coding=UTF-8 -*-

#本代码在mac电脑,python2.7环境测试通过
#第一行是mac/Linux系统脚本程序的标志,表示从环境参量中寻找python程序解释器来执行本脚本
#省去了每次在命令行使用 python <脚本名> 这样的执行方式
#第二行表示本脚本文本文件存盘使用的代码是utf-8,并且字符串使用的编码也是utf-8,
#在本源码中,这一点其实没有什么区别,但如果需要中文输出的时候,这一行就必须要加了。

#引入TensorFlow库
import tensorflow as tf
#引入数值计算库
import numpy as np

#使用 NumPy 生成假数据集x,代表房间的平米数,这里的取值范围是0-1的浮点数,
#原因请看正文中的说明,属于是“规范化”之后的数据
# 生成的数据共100个,式样是100行,每行1个数据
x = np.float32(np.random.rand(100,1))
#我们假设每平米0.5万元,基础费用0.7万,这个数值也是规范化之后的,仅供示例
#最终运行的结果,应当求出来0.5/0.7这两个值代表计算成功
#计算最终房价y,x和y一同当做我们的样本数据
# np.dot的意思就是向量x * 0.5
y = np.dot(x,0.5) + 0.7
#---------------------------------数据集准备完成
#以下使用TensorFlow构建数学模型,在这个过程中,
#直到调用.run之前,实际上都是构造模型,而没有真正的运行。
#这跟上面的numpy库每一次都是真正执行是截然不同的区别
# 请参考正文,我们假定房价的公式为:y=a*x+b

#tf.Variable是在TensorFlow中定义一个变量的意思
#我们这里简单起见,人为给a/b两个初始值,都是0.3,注意这也是相当于规范化之后的数值
b = tf.Variable(np.float32(0.3))
a = tf.Variable(np.float32(0.3))

#这是定义主要的数学模型,模型来自于上面的公式
#注意这里必须使用tf的公式,这样的公式才是模型
#上面使用np的是直接计算,而不是定义模型
# TensorFlow的函数名基本就是完整英文,你应当能读懂
y_value = tf.multiply(x,a) + b

# 这里是代价函数,同我们文中所讲的唯一区别是用平方来取代求绝对值,
#目标都是为了得到一个正数值,功能完全相同,
#平方计算起来会更快更容易,这种方式也称为“方差“
loss = tf.reduce_mean(tf.square(y_value - y))
# TensorFlow内置的梯度下降算法,每步长0.5
optimizer = tf.train.GradientDescentOptimizer(0.5)
# 代价函数值最小化的时候,代表求得解
train = optimizer.minimize(loss)

# 初始化所有变量,也就是上面定义的a/b两个变量
init = tf.global_variables_initializer()

#启动图
sess = tf.Session()
#真正的执行初始化变量,还是老话,上面只是定义模型,并没有真正开始执行
sess.run(init)

#重复梯度下降200次,每隔5次打印一次结果
for step in xrange(0, 200):
    sess.run(train) 
    if step % 5 == 0:
        print step, sess.run(loss),sess.run(a), sess.run(b)

コードは概念が、全く問題なかった場合は、詳細な説明を参照する元に実行されないようにすることを期待して、オリジナルのノートを保持します。
numpyのは、線形関数を用いて生成されたサンプルのセットを生成するために、サンプルのセットを使用します。これらのサンプルは、それによって、未知の量(重量)及びオフセット(バイアス)値の線形関数を求める、TensorFlow学習を使用しています。
元のテキストは、単に「機械学習」の基本的な原理を説明するために開始するために、この例では、実用的な価値を持っていない、と言われてきました。

互換2.0 V1は、コード1.1に従うようにパケットを使用します

2.0は、既存の1.xのコードとの互換性のためtensorflow.compat.v1コードパッケージを提供TensorFlow、あなたはほとんど変更せずに実行しないことができます。それはTensorFlow直接参照コードの多くが含まれたり、独自のPython拡張パッケージを作成するためのcontrib図書館コミュニティは、あなたはこのモードを使用することはできません。TensorFlow 2.0はまた少し後悔作るのcontribリポジトリを、削除されました。
既存のコードをアップグレードするには、このメソッドを使用して、単に元のプログラムがTensorFlow引用始まっ必要があります。

import tensorflow as tf

それは通常次の2行として使用し続けることができる置き換えます。

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

変更せずに他のコード。個人的に私は使用が安定しており、コードをリファクタリングしていない場合は、このように最初の選択肢とみなされることと思います。

自動的にコード1.xでは2.0に移行する移行ツールを使用します

自動的にコード1.1 2.0コードを変換するコマンドラインツールでTensorFlow 2.0マイグレーション。(私たちのファイル名はfirst-tf.pyであると仮定して)次のようにツールを使用することです。

tf_upgrade_v2 --infile first-tf.py --outfile first-tf-v2.py

また、全体のアップグレードプログラムフォルダを行うことができます移行ツールは、ヘルプドキュメントツール自体を参照してください。
本質的には、アップグレードするために、コード移行ツールを使用して、また、コードのTensorFlow 2.0環境1.1を実行し、互換性パックtensorflow.compat.v1を提供するために使用されます。新しいコードは、あなたが参照コントラストのために自動変換した後、ここに掲載されています。

#引入TensorFlow库
import tensorflow as tf
#import tensorflow.compat.v1 as tf
tf.compat.v1.disable_v2_behavior()

#引入数值计算库
import numpy as np

#使用 NumPy 生成假数据集x,代表房间的平米数,这里的取值范围是0-1的浮点数,
#原因请看正文中的说明,属于是“规范化”之后的数据
# 生成的数据共100个,式样是100行,每行1个数据
x = np.float32(np.random.rand(100,1))
#我们假设每平米0.5万元,基础费用0.7万,这个数值也是规范化之后的,仅供示例
#最终运行的结果,应当求出来0.5/0.7这两个值代表计算成功
#计算最终房价y,x和y一同当做我们的样本数据
# np.dot的意思就是向量x * 0.5
y = np.dot(x,0.5) + 0.7
#---------------------------------数据集准备完成
#以下使用TensorFlow构建数学模型,在这个过程中,
#直到调用.run之前,实际上都是构造模型,而没有真正的运行。
#这跟上面的numpy库每一次都是真正执行是截然不同的区别
# 请参考正文,我们假定房价的公式为:y=a*x+b

#tf.Variable是在TensorFlow中定义一个变量的意思
#我们这里简单起见,人为给a/b两个初始值,都是0.3,注意这也是相当于规范化之后的数值
b = tf.Variable(np.float32(0.3))
a = tf.Variable(np.float32(0.3))

#这是定义主要的数学模型,模型来自于上面的公式
#注意这里必须使用tf的公式,这样的公式才是模型
#上面使用np的是直接计算,而不是定义模型
# TensorFlow的函数名基本就是完整英文,你应当能读懂
y_value = tf.multiply(x,a) + b

# 这里是代价函数,同我们文中所讲的唯一区别是用平方来取代求绝对值,
#目标都是为了得到一个正数值,功能完全相同,
#平方计算起来会更快更容易,这种方式也称为“方差“
loss = tf.reduce_mean(input_tensor=tf.square(y_value - y))
# TensorFlow内置的梯度下降算法,每步长0.5
optimizer = tf.compat.v1.train.GradientDescentOptimizer(0.5)
# 代价函数值最小化的时候,代表求得解
train = optimizer.minimize(loss)

# 初始化所有变量,也就是上面定义的a/b两个变量
init = tf.compat.v1.global_variables_initializer()

#启动图
sess = tf.compat.v1.Session()
#真正的执行初始化变量,还是老话,上面只是定义模型,并没有真正开始执行
sess.run(init)

#重复梯度下降200次,每隔5次打印一次结果
for step in range(0, 200):
    sess.run(train) 
    if step % 5 == 0:
        print(step, sess.run(loss),sess.run(a), sess.run(b))

変換後は、予約のコメントセクションは、プログラマが保証することができ、文書を交換するためのコードを使用したい、完璧なコードになります。2.0すべてのクラスまたはメソッドが変更され、対応する変換ツールは、例えば、tensorflow.compat.v1代わりクラスまたはメソッドで使用されます。

optimizer = tf.compat.v1.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
init = tf.compat.v1.global_variables_initializer()

したがって、本質的に、本実施の形態では、パケットなどの代替tensorflowのtensorflow.compat.v1パケットを用いて第一の方法は、同一の方法です。

TensorFlowネイティブ2.0プログラムを書きます

2.0は、新しいバージョンのコードのために元のコードを再構築TensorFlow関連する特徴を学習コースの進化の推奨される方法は、正しい方法です。公正を期すため、結局、ほとんどのシステムは、より多くの機能を提供し、しきい値を減少させるためにアップグレードされます。TensorFlow 2.0も大幅に使用するための閾値を低下させます。バージョン1.xよりも仕事の大半は、完了するために、コードの少ない量を使用することができます。
1.1と2.0 TensorFlowの重要な違いを初めて目:

  • APIレベルのクラスでは、方法は、大幅な変更を加えた、必要が使用されているより身近になりました
  • セッションはSession.runまで待つ必要なしに、各コマンドを直接実行、メカニズムをキャンセル
  • 廃止セッションメカニズム、数学的モデルの元の定義のため、代わりに書かれたPythonの関数を使用します。オリジナルfeed_dictとtf.placeholderは、入力部の機能となり、元のフェッチは、関数の戻り値となります。
  • 使いやすく抽象化の元TensorFlow API高度を使用してKerasモデルシステム、
  • オリジナルのトレーニングサイクルを置き換えるためにtf.keras.Model.fitを使用してください。

通常の状況下では、最後のtf.keras.Model.fitが大幅にコードのトレーニングサイクルの量を減らすことができます。しかし、このケースでは、我々は現実の世界の例をシミュレートし、このような状況でkerasが最適化されていない、適用されません。そのため、彼らはこのような場合には(実際には、使用してくださいすることも可能ですが、モデルをカスタマイズしたい、作業負荷がより価値がある)tf.keras.Model.fitを使用することはできません。したがって、この場合には、まだ独自のトレーニングサイクルを記述する必要があります。そして、API 2.0の変化、より複雑なコードため。しかし、私を信じて、より正式な申請、ニューラルネットワークの使用、および他の一般的に使用される畳み込みアルゴリズムまで待って、コードを大幅に簡素化されます。
次のようにネイティブコードのコードを使用してTensorFlow 2.0です。

#!/usr/bin/env python3
#上面一行改为使用python3解释本代码

#引入python新版本的语言特征
from __future__ import absolute_import, division, print_function

#引入TensorFlow库,版本2.0
import tensorflow as tf

#引入数值计算库
import numpy as np

#使用 NumPy 生成假数据集x,代表房间的平米数,这里的取值范围是0-1的浮点数,
#原因请看正文中的说明,属于是“规范化”之后的数据
# 生成的数据共100个,式样是100行,每行1个数据
x = np.float32(np.random.rand(100,1))
#我们假设每平米0.5万元,基础费用0.7万,这个数值也是规范化之后的,仅供示例
#最终运行的结果,应当求出来0.5/0.7这两个值代表计算成功
#计算最终房价y,x和y一同当做我们的样本数据
y = np.dot(x,0.5) + 0.7
#---------------------------------数据集准备完成
# 请参考正文,我们假定房价的公式为:y=a*x+b
#定义tensorflow变量,a是权重,b是偏移
b = tf.Variable(np.float32(0.3))
a = tf.Variable(np.float32(0.3))

#以上代码基本同tensorflow1.x版本一致
#以下有了区别
#使用python语言定义数学模型,模型来自于上面的公式
#上面使用np的是直接计算得到训练样本,而不是定义模型
#模型中并非必须使用tensorflow的计算函数来代替python的乘法运算
@tf.function
def model(x):
        return a*x+b

#定义代价函数,也是python函数
def loss(predicted_y, desired_y):
    return tf.reduce_sum(tf.square(predicted_y - desired_y))

# TensorFlow内置Adam算法,每步长0.1
optimizer = tf.optimizers.Adam(0.1)
# 还可以选用TensorFlow内置SGD(随机最速下降)算法,每步长0.001
#不同算法要使用适当的步长,步长过大会导致模型无法收敛
#optimizer = tf.optimizers.SGD(0.001)

#重复梯度下降200次,每隔5次打印一次结果
for step in range(0, 200):
        with tf.GradientTape() as t:
                outputs = model(x)  #进行一次计算
                current_loss = loss(outputs, y) #得到当前损失值
                grads = t.gradient(current_loss, [a, b])    #调整模型中的权重、偏移值
                optimizer.apply_gradients(zip(grads,[a, b]))    #调整之后的值代回到模型
        if step % 5 == 0:   #每5次迭代显示一次结果
                print( "Step:%d loss:%%%2.5f weight:%2.7f bias:%2.7f " % 
                        (step,current_loss.numpy(), a.numpy(), b.numpy()))

アップグレード中にプログラムを変更し、特別な処理をした、ソースコード内に残るコメントを使用。私は解散するよりも、この方法は、より完全な説明を選ぶことができます感じています。
最後に、新しいプログラムの実施の結果を見てみましょう。

Step:0 loss:%25.78244 weight:0.4000000 bias:0.4000000 
Step:5 loss:%2.71975 weight:0.7611420 bias:0.7740188 
Step:10 loss:%3.09600 weight:0.6725605 bias:0.7224629 
Step:15 loss:%0.87834 weight:0.4931822 bias:0.5800986 
Step:20 loss:%1.24737 weight:0.4960071 bias:0.6186275 
Step:25 loss:%0.22444 weight:0.5730734 bias:0.7264798 
Step:30 loss:%0.47145 weight:0.5464076 bias:0.7252067 
Step:35 loss:%0.09156 weight:0.4736322 bias:0.6712209 
Step:40 loss:%0.14845 weight:0.4771673 bias:0.6866464 
Step:45 loss:%0.06199 weight:0.5101752 bias:0.7255269 
Step:50 loss:%0.03108 weight:0.4946054 bias:0.7112849 
Step:55 loss:%0.04115 weight:0.4770990 bias:0.6918764 
Step:60 loss:%0.00145 weight:0.4950625 bias:0.7060429 
Step:65 loss:%0.01781 weight:0.5029647 bias:0.7096580 
Step:70 loss:%0.00211 weight:0.4934593 bias:0.6963260 
Step:75 loss:%0.00298 weight:0.4983235 bias:0.6982682 
Step:80 loss:%0.00345 weight:0.5049748 bias:0.7031375 
Step:85 loss:%0.00004 weight:0.5001755 bias:0.6976562 
Step:90 loss:%0.00102 weight:0.5002422 bias:0.6978318 
Step:95 loss:%0.00065 weight:0.5029225 bias:0.7010939 
Step:100 loss:%0.00001 weight:0.5000774 bias:0.6990223 
Step:105 loss:%0.00021 weight:0.4996552 bias:0.6993059 
Step:110 loss:%0.00015 weight:0.5007215 bias:0.7008768 
Step:115 loss:%0.00000 weight:0.4993480 bias:0.6997767 
Step:120 loss:%0.00003 weight:0.4995552 bias:0.7000407 
Step:125 loss:%0.00004 weight:0.5001000 bias:0.7004969 
Step:130 loss:%0.00001 weight:0.4995880 bias:0.6998325 
Step:135 loss:%0.00000 weight:0.4999941 bias:0.7000810 
Step:140 loss:%0.00001 weight:0.5001197 bias:0.7000892 
Step:145 loss:%0.00000 weight:0.4999250 bias:0.6998329 
Step:150 loss:%0.00000 weight:0.5001498 bias:0.7000451 
Step:155 loss:%0.00000 weight:0.5000388 bias:0.6999565 
Step:160 loss:%0.00000 weight:0.4999948 bias:0.6999494 
Step:165 loss:%0.00000 weight:0.5000526 bias:0.7000424 
Step:170 loss:%0.00000 weight:0.4999576 bias:0.6999717 
Step:175 loss:%0.00000 weight:0.4999971 bias:0.7000214 
Step:180 loss:%0.00000 weight:0.4999900 bias:0.7000131 
Step:185 loss:%0.00000 weight:0.4999775 bias:0.6999928 
Step:190 loss:%0.00000 weight:0.5000094 bias:0.7000152 
Step:195 loss:%0.00000 weight:0.4999923 bias:0.6999906 

モデルを学習した後、その結果は、当社の事前設定値に非常に近いです。
プログラムはまた、ランダム速い降下アルゴリズム(SGD)を使用して検討することができ、あなたは、シールド上の現在のアダム・アルゴリズムのコメント記号を入れてノートを開くことができますしようとするSGDアルゴリズムをシールド。データセットの点で、本実施形態では、SGDが低下同じサイクル数下で、精度が低い解決され、以下のステップを必要とします。この例では、それを見ることができる、アダムは明らかに、より効率的なアルゴリズムです。TensorFlowのサポートでは、データと数理モデルの同じセットのため、アルゴリズムの変更を学ぶことは非常に簡単になります。

(続き...)

おすすめ

転載: www.cnblogs.com/jfdwd/p/11446358.html