tensorflow - 如何解决 Trainable-False 在 Keras 中不起作用的问题?
问题描述
我现在面临“trainable=false”的故障。
当我开发一个结构的代码时,
该模型有两个细分模型(FC模型,CN模型),它们以串联方式连接。
仅训练 FC 模型后,我想冻结 FC 并训练 FC+CN,整个模型。
然而,可训练的冻结不起作用,并且出现了一些奇怪的事情。
不冻结时:
model.FCnetwork.trainable = True
model.FCnetwork.summary()
Total params: 2,584,576
Trainable params: 2,578,432
Non-trainable params: 6,144
当冻结时:
model.FCnetwork.trainable = False
model.FCnetwork.summary()
Total params: 5,163,008
Trainable params: 2,578,432
Non-trainable params: 2,584,576
总参数增加。当然,冷冻不起作用。
这是我设计的课程
class MYMAP():
def __init__(self):
# Input shape
optimizer = optimizers.Adam()
self.CNnetwork= self.Convolutional_network()
self.CNnetwork.compile()
self.FCnetwork = self.Fullyconnected_network()
self.FCnetwork.compile(loss='mse',
optimizer=optimizer)
z = Input(shape=(input_size,))
img = self.FCnetwork(z)
valid = self.CNnetwork(img)
self.combined = Model(z, valid)
optimizer_DG = optimizers.Adam()
self.combined.compile(loss='mse', optimizer=optimizer_DG)
def Fullyconnected_network(self):
noise = Input(shape=(input_size,))
img = model(noise)
return Model(noise, img)
def Convolutional_network(self):
img = Input(shape=(image_size_vectored,))
validity = model(img)
return Model(img, validity)
我很难找出解决方法。
非常感谢。
解决方案
正如警告所说的那样
model.trainable
你没有打电话就设置了吗model.compile
正确的示例代码:
class MYMAP():
def __init__(self):
self.optimizer = optimizers.Adam()
self.FCnetwork = self.Fullyconnected_network()
self.FCnetwork.compile(loss='mse',
optimizer=self.optimizer)
z = Input(shape=(32,))
img = self.FCnetwork(z)
def Fullyconnected_network(self):
noise = Input(shape=(32,))
img = Dense(8)(noise)
return Model(noise, img)
model = MYMAP()
model.FCnetwork.trainable = True
model.FCnetwork.compile(loss='mse', optimizer=optimizers.Adam())
model.FCnetwork.summary()
model.FCnetwork.trainable = False
model.FCnetwork.compile(loss='mse', optimizer=optimizers.Adam())
model.FCnetwork.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_39 (InputLayer) (None, 32) 0
_________________________________________________________________
dense_15 (Dense) (None, 8) 264
=================================================================
Total params: 264
Trainable params: 264
Non-trainable params: 0
_________________________________________________________________
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_39 (InputLayer) (None, 32) 0
_________________________________________________________________
dense_15 (Dense) (None, 8) 264
=================================================================
Total params: 264
Trainable params: 0
因此,请确保在更改模型的可训练参数后运行 model.compile。
推荐阅读
- cmake - 我怎么能再次运行cmake?
- python - 如何使用瓶中闪光灯?
- javascript - 如何测试浏览器是否支持 loading='lazy'?
- android - 是否可以在构造函数中将 ViewModel 传递给 Fragment?
- c++ - 为什么 temp 和 c 可以使用点运算符访问 a 和 b 私有变量?
- python - 尝试安装 Python 3 包 RPi.GPIO
- mysql - 数组列中的值 - MySQL
- javascript - 有办法让 CSS-root 获得 JavaScript 值吗?作为默认值
- c - CS50 潮人;如果 lock_pairs 创建循环,则跳过最后一个对
- icons - PWA 主屏幕图标在三星互联网浏览器上呈现模糊