在写CNN网络的时候使用keras框架可以更加简单、方便。而tensorflow也集合了keras模块,但似乎两者之间还有一点不兼容的部分。
keras框架下我们可以利用各种call_back函数来做很多事,比如动态调整学习率,用到的函数为 keras.callbacks.ModelCheckpoint ,该函数在模型训练的时候可以在loss不再收敛时,调小学习率。但此时如果我们使用tensorflow下的optimizers时会出现’TFOptimizer’ object has no attribute ‘lr’ 代码如下:
from tensorflow.keras.models import Model
from tensorflow.keras.callbacks import ReduceLROnPlateau
import keras
reduce_lr = ReduceLROnPlateau(monitor='val_loss',
factor=0.2,
patience=5,
min_lr=0.001)
model1 = Model(inputs = inputs, outputs = outputs) #定义网络模型
optimizer = tensorflow.train.AdamOptimizer() #或者
optimizer = tensorflow.keras.optimizers.Adam()
model1.compile(loss = 'mse', optimizer = optimizer)
model1.fit(x, y, callbacks = check_point)
tensoflow下的TFOptimizer没有lr,而keras下的optimizer则有lr这个属性,此时,如果我们改成:
optimizer = keras.optimizers.Adam()
则会编译错误
但如果我们不使用tensorflow下的keras,即:
from keras.models import Model
from keras.callbacks import ReduceLROnPlateau
import keras
则可以成功运行。