日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

记录之关于tensoflow中使用Adam优化算法导致模型保存时参数的变化的记录

發(fā)布時間:2024/4/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记录之关于tensoflow中使用Adam优化算法导致模型保存时参数的变化的记录 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.tensorflow ‘/conv/biases/Adam_1’not in ckpt file

????????這類問題是加載預(yù)訓(xùn)練模型時常常遇到的,原因就是在使用rmsprop或者adam優(yōu)化器的時候,他們會在自己內(nèi)部建立一個adam或者rmsprop變量,然而我們在使用SGD優(yōu)化器的時候不會新建變量,所以不會出現(xiàn)在這種問題。
? ? ? ? 問題原因:這類變量在我們的訓(xùn)練初始化圖時是存在的,但是我們的預(yù)訓(xùn)練模型由于某種保存機(jī)制,導(dǎo)致預(yù)訓(xùn)練模型中沒有這類變量的值(實際上這類變量是沒有什么意義的),所以導(dǎo)致上述報錯。因此我們可以考慮這種加載方式:

print('setting saver...')var = tf.global_variables()var_to_restore = [val for val in var if 'Adam_1' not in val.name and 'Adam' not in val.name] # 將所有Adam_1 和Adam變量篩除print("***********", len(var_to_restore))saver = tf.train.Saver(var_to_restore, max_to_keep=None)print('setting saver done...')

????????并且這類變量在實際測試時這類變量也是不被需要的,即我們真正的模型(tf.global_variables()這個集合里)中是沒有這類變量的,因此我們保存時講道理沒有必要保存Adam生成的變量。

訓(xùn)練時:

# build modeldimension = int(network_type[-1])sat_global, grd_global = SAFA(sat_x, grd_x, keep_prob, dimension, is_training)out_channel = sat_global.get_shape().as_list()[-1]sat_global_descriptor = np.zeros([input_data.get_test_dataset_size(), out_channel])grd_global_descriptor = np.zeros([input_data.get_test_dataset_size(), out_channel])loss = compute_loss(sat_global, grd_global)# set trainingglobal_step = tf.Variable(0, trainable=False)with tf.device('/gpu:0'):with tf.name_scope('train'):train_step = tf.train.AdamOptimizer(learning_rate, 0.9, 0.999).minimize(loss, global_step=global_step)

?測試時:

#building modeldimension = int(network_type[-1])sat_global, grd_global = SAFA(sat_x, grd_x, keep_prob, dimension, is_training)out_channel = sat_global.get_shape().as_list()[-1]sat_global_descriptor = np.zeros([input_data.get_test_dataset_size(), out_channel])grd_global_descriptor = np.zeros([input_data.get_test_dataset_size(), out_channel])print('setting saver...')saver = tf.train.Saver(tf.global_variables(), max_to_keep=None)print("********************",len(tf.global_variables()), tf.global_variables)for i, key in enumerate(tf.global_variables()):print(i, key.name)exit()print('setting saver done...')

通過訓(xùn)練和測試時的代碼對比,我們可以發(fā)現(xiàn),在初始化圖的時候,訓(xùn)練部分是有Adam部分的,但是測試部分沒有,因此我會產(chǎn)生:預(yù)訓(xùn)練模型在訓(xùn)練時不能正常加載的但是在測試時正常的問題。

上述問題的解決均可以通過選擇加載和保存變量的值來解決,可以參考我的另一篇博客:
Tensorflow詳解保存模型(進(jìn)階版一):如何有選擇的保存變量_NuerNuer的博客-CSDN博客

2.使用Adam時,的beta1_power和beta2_power變量
這實際上就是Adam中兩個參數(shù)的值,即:

tf.train.AdamOptimizer.__init__(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name=’Adam’)

beta1: A float value or a constant float tensor. The exponential decay rate for the 1st moment estimates.
接近 1 的常數(shù),一階矩估計的指數(shù)衰減因子;

beta2: A float value or a constant float tensor. The exponential decay rate for the 2nd moment estimates.
接近 1 的常數(shù),二階矩估計的指數(shù)衰減因子;

關(guān)于優(yōu)化器的更多內(nèi)容可參考:https://blog.csdn.net/lomodays207/article/details/84027365

?

總結(jié)

以上是生活随笔為你收集整理的记录之关于tensoflow中使用Adam优化算法导致模型保存时参数的变化的记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。