深度学习-Tensorflow2.2-Eager模式与自定义训练{4}-微分运算训练练习-16
Eager模式簡介
Tensorflow 發(fā)布了新的 TF 2.0 Beta 版本我們可以通過以下命令安裝:pip install tensorflow==2.0.0-beta1
TensorFlow的eager模式是一個命令式編程環(huán)境,它使得我們可以立即評估操作產(chǎn)生的結果,而無需構建計 算圖。
Eager模式極大的方便我們使用TensorFlow、調試模型,增加了網(wǎng)絡調試的靈活程度和tensorflow對于初學者友好性。
在這里我們可以叫它 tensorflow的交互模式。
與Tensorflow 1.x版本不同,tensorflow 2.0 默認使用 eager 模式。
執(zhí)行tf.executing_eagerly() 返回 True
Eager模式提供了一個靈活的研究和實驗機器學習平臺,提供直觀的界面 - 自然地構建代碼并使用Python數(shù)據(jù)結構。快速迭代小型模型和小型數(shù)據(jù)。
更容易調試 -在交互式環(huán)境中直接檢查、運行模型、測試變化。這個過程中代碼會即時錯誤報告。
自然控制流 - eager模式下使用Python控制流而不是圖控制流,簡化了動態(tài)模型的創(chuàng)建。
Eager模式支持大多數(shù)TensorFlow操作和GPU加速。
eager模式下,TensorFlow操作會立即執(zhí)行并將其值返回給Python。
tf.Tensor對象引用具體值而不是計算圖中節(jié)點的符號句柄。
Eager模式運行特點
由于在會話中沒有構建和運行的計算圖,因此使用print()語句或調試器很容易檢查結果、評估輸出,打印和檢查張量值,而不影響計算梯度的過程。
Eager模式下Tensorflow可與NumPy很好地協(xié)作。
TensorFlow 數(shù)學運算可將Python對象和NumPy數(shù)組轉換為tf.Tensor對象。
而 tf.Tensor.numpy方法將對象的值作NumPy返回ndarray。
Eager模式中梯度的計算
在Eager模式中,使用tf.GradientTape跟蹤計算梯度的操作
由于在每次執(zhí)行可能發(fā)生不同的操作,所有前向傳遞操作都被記錄到Tape上。要計算漸變,就往后播放磁帶
然后丟棄。
特定的tf.GradientTape只能計算一個梯度; 后續(xù)調用會引發(fā)運行時錯誤。
也可以設置可重復調用
張量
自動微分
自定義訓練
import tensorflow as tf (train_image,train_labels),_=tf.keras.datasets.mnist.load_data() train_image.shape,train_labels train_image = tf.expand_dims(train_image,-1)# 擴充維度 train_image.shape # 改變數(shù)據(jù)類型 train_image = tf.cast(train_image/255,tf.float32) # 歸一化并改變數(shù)據(jù)類型 train_labels = tf.cast(train_labels,tf.int64) dataset = tf.data.Dataset.from_tensor_slices((train_image,train_labels)) # 建立數(shù)據(jù)集 dataset dataset = dataset.shuffle(10000).batch(32) # 對數(shù)據(jù)進行洗牌 亂序 dataset # 建立模型 model = tf.keras.Sequential([tf.keras.layers.Conv2D(16,[3,3],activation="relu",input_shape=(28,28,1)),tf.keras.layers.Conv2D(32,[3,3],activation="relu"),tf.keras.layers.GlobalAveragePooling2D(),tf.keras.layers.Dense(10) # 未激活 ]) # 自定義循環(huán)(編譯) optimizers = tf.keras.optimizers.Adam() # 優(yōu)化函數(shù) loss_func = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) # 損失函數(shù) features,labels = next (iter(dataset)) features.shape,labels.shape predictions = model(features) predictions.shape tf.argmax(predictions,axis=1) labels def loss(model,x,y):y_ = model(x)return loos_func(y,y_) def train_step(model,images,labels):with tf.GradientTape() as t:loss_step = loss(model,images,labels)grads = t.gradient(loss_step,model.trainable_variables)optimizers.apply_gradients(zip(grads,model.trainable_variables)) def train():for epoch in range(10):for (batch,(images,labels)) in enumerate(dataset):train_step(model,images,labels)print("epoch{} is finshed".format(epoch)) train()
代碼如下:
總結
以上是生活随笔為你收集整理的深度学习-Tensorflow2.2-Eager模式与自定义训练{4}-微分运算训练练习-16的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习-Tensorflow2.2-卷
- 下一篇: 深度学习-Tensorflow2.2-T