记录之关于tensoflow中使用Adam优化算法导致模型保存时参数的变化的记录
1.tensorflow ‘/conv/biases/Adam_1’not in ckpt file
????????這類問題是加載預訓練模型時常常遇到的,原因就是在使用rmsprop或者adam優(yōu)化器的時候,他們會在自己內(nèi)部建立一個adam或者rmsprop變量,然而我們在使用SGD優(yōu)化器的時候不會新建變量,所以不會出現(xiàn)在這種問題。
? ? ? ? 問題原因:這類變量在我們的訓練初始化圖時是存在的,但是我們的預訓練模型由于某種保存機制,導致預訓練模型中沒有這類變量的值(實際上這類變量是沒有什么意義的),所以導致上述報錯。因此我們可以考慮這種加載方式:
????????并且這類變量在實際測試時這類變量也是不被需要的,即我們真正的模型(tf.global_variables()這個集合里)中是沒有這類變量的,因此我們保存時講道理沒有必要保存Adam生成的變量。
訓練時:
# 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...')通過訓練和測試時的代碼對比,我們可以發(fā)現(xiàn),在初始化圖的時候,訓練部分是有Adam部分的,但是測試部分沒有,因此我會產(chǎn)生:預訓練模型在訓練時不能正常加載的但是在測試時正常的問題。
上述問題的解決均可以通過選擇加載和保存變量的值來解決,可以參考我的另一篇博客:
Tensorflow詳解保存模型(進階版一):如何有選擇的保存變量_NuerNuer的博客-CSDN博客
2.使用Adam時,的beta1_power和beta2_power變量
這實際上就是Adam中兩個參數(shù)的值,即:
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: einops包中的rearrange,r
- 下一篇: 记录之使用3080ti运行tensorf