是否有更有效的方法从数据集中提取特征,如下所示:
def extract_features(directory, sample_count):
features = np.zeros(shape=(sample_count, 6, 6, 512))
labels = np.zeros(shape=(sample_count, 6))
generator =
ImageDataGenerator(rescale=1./255).flow_from_directory(directory,
target_size=(Image_Size, Image_Size), batch_size = batch_size,
class_mode='categorical')
i = 0
print('Entering for loop...');
for inputs_batch, labels_batch in generator:
features_batch = conv_base.predict(inputs_batch)
features[i * 20 : (i + 1) * 20] = features_batch
labels[i * 20 : (i + 1) * 20] = labels_batch
i += 1
print(i);
if (i * 20) >= sample_count:
break
return features, labels
由于我的数据集太大,这个过程需要相当长的时间,我想知道是否有更好的方法来完成这个过程?在
提前感谢:)
Layer (type) Output Shape Param #
=================================================================
input_19 (InputLayer) (None, 200, 200, 3) 0
_________________________________________________________________
block1_conv1 (Conv2D) (None, 200, 200, 64) 1792
_________________________________________________________________
block1_conv2 (Conv2D) (None, 200, 200, 64) 36928
_________________________________________________________________
block1_pool (MaxPooling2D) (None, 100, 100, 64) 0
_________________________________________________________________
block2_conv1 (Conv2D) (None, 100, 100, 128) 73856
_________________________________________________________________
block2_conv2 (Conv2D) (None, 100, 100, 128) 147584
_________________________________________________________________
block2_pool (MaxPooling2D) (None, 50, 50, 128) 0
_________________________________________________________________
block3_conv1 (Conv2D) (None, 50, 50, 256) 295168
_________________________________________________________________
block3_conv2 (Conv2D) (None, 50, 50, 256) 590080
_________________________________________________________________
block3_conv3 (Conv2D) (None, 50, 50, 256) 590080
_________________________________________________________________
block3_pool (MaxPooling2D) (None, 25, 25, 256) 0
_________________________________________________________________
block4_conv1 (Conv2D) (None, 25, 25, 512) 1180160
_________________________________________________________________
block4_conv2 (Conv2D) (None, 25, 25, 512) 2359808
_________________________________________________________________
block4_conv3 (Conv2D) (None, 25, 25, 512) 2359808
_________________________________________________________________
block4_pool (MaxPooling2D) (None, 12, 12, 512) 0
_________________________________________________________________
block5_conv1 (Conv2D) (None, 12, 12, 512) 2359808
_________________________________________________________________
block5_conv2 (Conv2D) (None, 12, 12, 512) 2359808
_________________________________________________________________
block5_conv3 (Conv2D) (None, 12, 12, 512) 2359808
_________________________________________________________________
block5_pool (MaxPooling2D) (None, 6, 6, 512) 0
=================================================================
Total params: 14,714,688
Trainable params: 14,714,688
Non-trainable params: 0
_________________________________________________________________
Conv_Base Summary
Found 6000 images belonging to 6 classes.
Entering for loop...
1
2
3
4
5
6
7
8
9
10
11
12...
我要说不,我认为没有比这更有效的方法了。计算必须发生,尤其是在CPU上计算速度很慢。您所能做的最好的方法是通过转换数据集、保存数组,然后在每次训练时加载它们来避免重新计算。
我也经历了同样的事情,直到我崩溃,买了一个GPU。。。从那以后,我的生活就没有那么紧张了。我强烈建议你投资,如果你买不起其他东西,即使是1050。你可能要想办法处理有限的GPU内存,但它会让事情变得更顺利。在
相关问题 更多 >
编程相关推荐