【发布时间】:2020-12-20 20:55:55
【问题描述】:
我正在尝试使用 CNN 进行特征提取,并使用 XGboost 对图像数据进行分类。我研究发现可以通过提取卷积层之后的数据来完成。我找到了一些类似问题的源代码并自己尝试。
model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), strides=(1,1), padding='same', activation="relu", input_shape = data.shape[1:]))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))
model.add(Conv2D(64, kernel_size=(3,3), padding='same', strides=(1,1), activation="relu") )
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) #max pool window 2x2
model.add(Conv2D(128, kernel_size=(3,3), padding='same', strides=(1,1), activation="relu"))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) #max pool window 2x2
model.add(Conv2D(256, kernel_size=(3,3), padding='same', strides=(1,1), activation="relu"))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) #max pool window 2x2
model.add(Flatten())
model.add(Dense(128, activation="relu", name='firstDenseLayer'))
model.add(Dense(1, activation="sigmoid"))
# model.summary()
# print(model)
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(data, label, batch_size=16, epochs=10, validation_data=(val_data, val_label))
下面我访问了名为“firstDenseLayer”的密集层。
import xgboost as xgb
from keras.models import Model
layerName = 'firstDenseLayer'
intermediate_layer_model = Model(inputs=model.input,
outputs=model.get_layer(layerName).output)
intermediate_output = intermediate_layer_model.predict(data)
from xgboost import XGBClassifier
xgbmodel = XGBClassifier(objective='multi:softmax', num_class= 2)
xgbmodel.fit(intermediate_output, label)
xgbmodel.score(intermediate_output, label)
由于我是新手,我有几个困惑。
- 数据的流动方式。通过卷积层提取图片的特征后,我如何真正从那里访问数据?
- 这行代码在做什么?它在提取什么数据?
intermediate_output = intermediate_layer_model.predict(data)
- 当我省略(保持注释掉)以下行时,
model.fit(data, label, batch_size=16, epochs=10, validation_data=(val_data, val_label))
从第一个 sn-p 开始并直接运行 XGboost 模型,XGboost 给出的准确度较低,而当我不这样做时,它给出的准确度更高。为什么会这样?
请帮帮我。我坚持了很长一段时间。我只是想从最后一个卷积层访问提取的特征数据,并使用该数据使用 XGboost 进行分类。当我尝试遵循从网上找到的方法时,我不确定这是否是唯一的方法。如果有其他方法请告诉我。
【问题讨论】:
标签: python tensorflow machine-learning deep-learning xgboost