使用下方展示的二维CNN从图像中提取特征后,如何存储这些提取的特征,以便训练一个SVM来对特征进行分类?
模型:
model = Sequential()model.add(Conv2D(32, (3, 3), input_shape=(3, 150, 150)))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Conv2D(32, (3, 3)))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Conv2D(64, (3, 3)))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Flatten()) # this converts our 3D feature maps to 1D feature vectorsmodel.add(Dense(64))model.add(Activation('relu'))model.add(Dropout(0.5))model.add(Dense(4))model.add(Activation('softmax'))
提取特征的方法:
layer_name = 'layer_name'intermediate_layer_model = Model(inputs=model.input, outputs=model.get_layer(layer_name).output)intermediate_output = intermediate_layer_model.predict(data)
步骤:
-
存储从我的图像数据集中提取的特征,以便训练SVM分类器。
-
使用
train_test_split()
来分割训练和测试数据 -
训练分类器:
clf = svm.SVC()clf.fit(X, y)
我需要知道如何进行这些操作。
回答:
你可以尝试以HDF5文件格式保存和加载这些数据。相较于pickle,HDF5有多个优势。它在保存和加载时速度更快(特别是对于大型数组)。
为此,你需要安装h5py包。保存和加载的示例代码如下:
保存时:
import h5pyh5f = h5py.File('your_file_name.h5', 'w')h5f.create_dataset('layer_model', data=intermediate_layer_model)h5f.create_dataset('output', data=intermediate_output)h5f.close()
加载时
import h5pyh5f = h5py.File('your_file_name.h5', 'r')intermediate_layer_model = h5f['layer_model'][:]intermediate_output = h5f['output'][:]h5f.close()