【发布时间】:2021-03-24 23:04:50
【问题描述】:
我正在尝试在我自己的模型上实施迁移学习,但失败了。我的实现遵循此处的指南
https://keras.io/guides/transfer_learning/
How to do transfer-learning on our own models?
tensoflow 2.4.1Keras 2.4.3
旧模型(效果很好):
model = Sequential()
inputShape = (256, 256, 3)
chanDim = -1
# CONV => RELU => POOL
model.add(Conv2D(32, (3, 3), padding="same", input_shape=inputShape))
model.add(Activation("relu"))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(3, 3)))
model.add(Dropout(0.25))
# (CONV => RELU) * 2 => POOL
model.add(Conv2D(64, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(BatchNormalization(axis=chanDim))
model.add(Conv2D(64, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
# (CONV => RELU) * 2 => POOL
model.add(Conv2D(128, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(BatchNormalization(axis=chanDim))
model.add(Conv2D(128, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
# first (and only) set of FC => RELU layers
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation("relu"))
model.add(BatchNormalization())
model.add(Dropout(0.5))
# softmax classifier
model.add(Dense(classes))
model.add(Activation("softmax"))
迁移学习:
old_model = load_model('old.model')
# removes top 2 activation layers
for i in range(2):
old_model.pop()
# mark loaded layers as not trainable
for layer in old_model.layers:
layer.trainable = False
# initialize the new model
in_puts = Input(shape=(256, 256, 3))
count = len(old_model.layers)
ll = old_model.layers[count - 1].output
classes = len(lb.classes_)
ll = Dense(classes)(ll)
ll = Activation("softmax", name="activation3_" + NODE)(ll)
model = Model(inputs=in_puts, outputs=ll) # ERROR
opt = Adam(lr=INIT_LR, decay=INIT_LR / EPOCHS)
model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"])
# train the network
H = model.fit(x_train, y_train, validation_data=(x_test, y_test), steps_per_epoch=len(x_train) // BS, epochs=EPOCHS, verbose=1)
# save the model to disk
model.save("new.model")
错误
ValueError: Graph disconnected: cannot obtain value for tensor
KerasTensor(type_spec=TensorSpec(shape=(None, 256, 256, 3), dtype=tf.float32,
name='conv2d_input'), name='conv2d_input', description="created by layer 'conv2d_input'") at
layer "conv2d". The following previous layers were accessed without issue: []
【问题讨论】:
标签: python tensorflow machine-learning keras deep-learning