01-TensorFlowの基礎
Tensorflowは何ですか
Googleのオープンソースソフトウェアライブラリ
- 、数値計算をデータフロー図を取ります
- 複数のプラットフォームのサポート - GPU、CPU、モバイルデバイス
- 当初は、ますます一般的になってきて、深い学習に使用
Tensorflowデータ構造
データフロー図の#
ノード間の入出力関係、搬送ラインテンソル:ライン。テンソル:テンソルは、 -データを参照
- ノード:操作(OP):特別な演算ノード、すべての操作は、OP、データ処理であります
- API関数のちょうど使用tensorflowはOPで定義されています
- ノードは、コンピューティングデバイスの多様上で実行するように割り当てられています
- グラフ:図の全体的なプログラム構造。
- デフォルトのマップがあり、基本的に割り当てられたメモリの場所で、すべてのテンソルOPとメモリアドレスは同じです。
- 図異なるメモリアドレスは、干渉を計算するプロセスと同じではありません
- セッション:セッション:図演算プログラム(マップのみを実行するには、図グラフ= G実行するセッションに指定することができます)
- の構造図
- コンピューティングリソースの割り当て
- リソースを制御(変数、キュー、スレッド)
特性Tensorflow
- 柔軟性、関数を呼び出すの容易度の高い、あなたはまた、独自のパッケージを作成することができます
- 真の可搬性、あなたは、単に別のデバイス上で実行することができます
- 製品の研究と組み合わせ
- 自動主に逆伝播計算のため、差別化
- 多言語サポート、C ++、Javaの、JS、R
- パフォーマンスの最適化
フロントエンドシステムTensorflow
- 図機構定義手順:フロントエンドシステム
- バックエンドシステム:計算マップ構造
Tensorflowバージョンの変更
Tensorflow1.0の主な特長
- XLA:線形代数を加速
- 58倍のトレーニング速度を向上
- あなたは、モバイルデバイス上で実行することができます
- これは、より高いレベルのAPIを引用しました
- tf.layers / tf.metrics / tf.losses / tf.keras
- Tensorflowデバッガ
- サポートドッキングウィンドウのミラーリング、導入tensorflow提供サービス
Tensorflow 2.0の主な特長
- 単純なモデルの構築を使用してTf.kerasと熱心モード
- 堅牢なクロスプラットフォームの展開モデル
- 強力な研究実験
- 清除了不推荐使用和重复的API
Tensorflow2.0 简化模型开发流程
- 使用tf.data加载数据
- 使用tf.keras 构建模型,也可以使用premade estimator 验证模型
- 使用tensorflow hub进行迁移学习
- 注: 迁移学习 - 使用一个前人预先训练好的,应用在其他领域的网络作为模型训练的起点,站在前人基础上更进一步,不必重新发明轮子。
- 使用eager mode 进行运行和调试
- 使用分发策略进行分布式训练
- 导出到SavedModel
- 使用Tensorflow Serve, Tensorflow Lite, Tensorflow.js
Tensorflow 强大的跨平台能力
- Tensorflow 服务
- 直接通过HTTP/ TEST 或 GTPC/协议缓冲区
- Tensorflow Lite - Android, iOS 和嵌入式
- Tensorflow.js - Javascript 部署
- 其他语言
Tensorflow vs. Pytorch
入门时间(易用性)
- Tensorflow 1.*
- 静态图 ,构建完之后不可以更改, 效率高
- 额外概念, 会话,变量,占位符
- 写样本代码
- Tensorflow 2.0
- 动态图, 构建完之后可以更改, 效率不高,调试容易
- Eager mode 直接集成在python中
- Pytorch
- 动态图
- numpy扩展,集成在python
"""
不同方式求解 1 + 1/2 + 1/2^2 + 1/2^3 + ...... + 1/2^50
"""
# 1. tensorflow 1.*求解
import tensorflow as tf
print(tf.__version__)
x = tf.Variable(0.)
y = tf.Variable(1.)
add_op = x.assign(x + y)
div_op = y.assign(y / 2)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for iteration in range(50):
sess.run(add_op)
sess.run(div_op)
print(x.eval())
# 2. pytorch 求解
import torch
print(torch.__version__)
x = torch.Tensor([0.])
y = torch.Tensor([1.])
for iteration in range(50):
x = x + y
y = y / 2
print(x)
# 3. tensorflow 2.0 求解
import tensorflow as tf
print(tf.__version__)
x = tf.constant(0.)
y = tf.constant(1.)
for iteration in range(50):
x = x + y
y = y / 2
print(x.numpy())
# 4. 纯python求解
x = 0
y = 1
for iteration in range(50):
x = x + y
y = y / 2
print(x) # 精度有点不一样
图创建和调试
- Tensorflow 1.*
- 静态图,难以调试, 需要使用tfdbg
- Tensorflow 2.0 与 pytorch
- 动态图,python自带的调试工具
全面性
- python缺少少量的功能,使用频次很低
- 沿维翻转张量 (np.flip, np.flipud, np.fliplr)
- 检查无穷与非数值张量(np.is_nan, np.is_inf)
- 快速傅里叶变换 (np.fft)
序列化和部署
- Tensorflow 支持更加广泛,多语言,跨平台
- pytorch 支持比较简单