python中tf1代碼到tf2代碼的轉(zhuǎn)換

原因:

目前在學(xué)習(xí)階段,看到網(wǎng)上的資料使用的是tf1的代碼,我使用的是tf2的,所以需要直接將tf1轉(zhuǎn)換為tf2代碼以適應(yīng)tf2的開(kāi)發(fā)方式

遇到的情景:

1. 使用Session 的情景:
y = tf.constant(3, name='y_hat'); y_hat = tf.constant(5, name='y')
init = tf.global_variables_initializer()
loss = tf.Variable((y - y_hat)**2, name='loss')
with tf.Session() as session: 
    session.run(init)   
    print(session.run(loss))

在tf2中,默認(rèn)開(kāi)啟了Eager Execution環(huán)境,不需要定義圖,也不需要使用Session,直接運(yùn)行,就可以得到結(jié)果。

Eager Execution 是用于研究和實(shí)驗(yàn)的靈活機(jī)器學(xué)習(xí)平臺(tái),具備以下特性:
  • 直觀的界面 - 自然地組織代碼結(jié)構(gòu)并使用 Python 數(shù)據(jù)結(jié)構(gòu)??焖俚∧P秃托?shù)據(jù)。
  • 更方便的調(diào)試功能 - 直接調(diào)用運(yùn)算以檢查正在運(yùn)行的模型并測(cè)試更改。使用標(biāo)準(zhǔn) Python 調(diào)試工具立即報(bào)告錯(cuò)誤。
  • 自然的控制流 - 使用 Python 而非計(jì)算圖控制流,簡(jiǎn)化了動(dòng)態(tài)模型的規(guī)范。
    Eager Execution 支持大部分 TensorFlow 運(yùn)算和 GPU 加速。

轉(zhuǎn)換后

y_hat = tf.constant(3, name='y_hat');y = tf.constant(5, name='y')
loss = (y_hat - y)**2
print(loss)
2. placeholder
a = tf.placeholder(tf.float32, name="a")
sigmoid = tf.sigmoid(a)

在tf1中,這是為將來(lái)需要計(jì)算的數(shù)據(jù)預(yù)留位置的。在session中執(zhí)行sigmoid時(shí)將數(shù)據(jù)傳入
tf2中直接計(jì)算即可:

print(tf.sigmoid(a)) # a需要是 bfloat16, half, float, double, complex64, complex128 格式的
3. tf.contrib.layers.xavier_initializer

此函數(shù)用于生成層中梯度值接近的隨機(jī)數(shù)
在tf2中,可以使用tf.initializers.GlorotUniform替代,例如:

gu = tf.initializers.GlorotUniform()
W1 = tf.Variable(name='W1', initial_value=gu(shape=[25, 12288]))
4. reset_default_graph

reset_default_graph不適用于 Eager Execution 或 tf.function,并且您不應(yīng)直接調(diào)用它。要將使用 Graph 相關(guān)函數(shù)的代碼遷移到 TF2,請(qǐng)?jiān)跊](méi)有它們的情況下重寫代碼。有關(guān)Tensorflow 1 和 Tensorflow 2 之間的行為和語(yǔ)義變化的更多描述,請(qǐng)參閱 遷移指南。

在tf1中,reset_default_graph實(shí)際效果可以參考【TensorFlow】tf.reset_default_graph()函數(shù)-duanlianvip
在tf2中不存在這個(gè)問(wèn)題

5. tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

tf1中如下(這些代碼將在一個(gè)session中運(yùn)行):

optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

使用tf2(直接運(yùn)行):

with tf.GradientTape() as tape:
    optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate)
    _ = optimizer.minimize(cost, var_list=parameters, tape=tape)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容