【问题标题】:So many null value features while doing feature extraction using VGG19使用 VGG19 进行特征提取时有这么多空值特征
【发布时间】:2023-03-23 00:41:01
【问题描述】:

我正在研究图像识别问题。经过微调 VGG19 并添加了几层并训练了模型。在达到最佳测试精度后,我保存了模型,删除了最后 6 层,并使用以下代码提取了最后一个全连接层的激活。

ROWS,COLS = 669,1026
input_shape = (ROWS, COLS, 3)

# train_data_dir = '/home/spectrograms/train'
validation_data_dir = '/home/spectrograms/test'
nb_train_samples = 791
nb_validation_samples = 198
# epochs = 200
batch_size = 10

if K.image_data_format() == 'channels_first':
    input_shape = (3, ROWS, COLS)
else:
    input_shape = (ROWS, COLS,3)

test_datagen = ImageDataGenerator(rescale=1. / 255)
validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(ROWS, COLS),
    batch_size=batch_size,
    class_mode='binary')

model = Model(inputs=model.inputs, outputs=model.layers[-6].output)

predict = model.predict_generator(validation_generator,steps = 10)
print(predict[10])
print(predict[10].shape)

但是输出向量有很多零。

[5.77765644e-01 2.44531885e-01 0.00000000e+00 0.00000000e+00
 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
 2.99371660e-01 8.27999532e-01 2.34099194e-01 2.67183155e-01
 0.00000000e+00 1.95847541e-01 4.49438214e-01 1.00336084e-02
 0.00000000e+00 0.00000000e+00 4.63756740e-01 0.00000000e+00
 0.00000000e+00 1.15372933e-01 0.00000000e+00 0.00000000e+00
 1.13927014e-01 6.74777776e-02 7.49553144e-01 0.00000000e+00
 6.73675537e-02 2.85279214e-01 0.00000000e+00 0.00000000e+00
 1.84553280e-01 4.57495511e-01 0.00000000e+00 0.00000000e+00
 5.35506964e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00
 2.92950690e-01 0.00000000e+00 5.27026653e-01 0.00000000e+00
 0.00000000e+00 0.00000000e+00 3.94881278e-01 0.00000000e+00
 5.37508354e-02 6.67039156e-02 1.16688050e-01 6.52413011e-01
 3.44565332e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00
 0.00000000e+00 0.00000000e+00 1.10359691e-01 3.63592118e-01
 9.89193693e-02 1.15959466e-01 0.00000000e+00 1.57176346e-01
 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.90686011e-01
 0.00000000e+00 6.03572190e-01 1.97682872e-01 1.57113865e-01
 0.00000000e+00 2.84446061e-01 1.26254544e-01 0.00000000e+00
 0.00000000e+00 5.51187336e-01 0.00000000e+00 0.00000000e+00
 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
 1.11384936e-01 1.67153805e-01 2.63090044e-01 0.00000000e+00
 9.35753658e-02 9.16089058e-01 1.90610379e-01 0.00000000e+00
 0.00000000e+00 0.00000000e+00 3.04680824e-01 2.47930676e-01
 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
 1.50975913e-01 3.60320956e-02 0.00000000e+00 3.47187579e-01
 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
 3.01374853e-01 0.00000000e+00 2.38310188e-01 0.00000000e+00
 0.00000000e+00 0.00000000e+00 3.16582739e-01 0.00000000e+00
 0.00000000e+00 0.00000000e+00 0.00000000e+00 8.17666354e-04
 2.30050087e-01 4.66496646e-01 0.00000000e+00 0.00000000e+00
 1.05043598e-01 0.00000000e+00 6.77903090e-03 3.72976154e-01]

正常吗?还是我做错了什么?

【问题讨论】:

    标签: keras deep-learning conv-neural-network feature-extraction vgg-net


    【解决方案1】:

    对我来说似乎没关系。 正面非零值您在输出矢量中,那些是激活的神经元。由于vggnet 中使用的激活大多是relu (输出层除外),因此任何层的输出值 之间的界限0或一些正值

    如果您可能会记得,则Relu功能是类似的 - EM> h3>
    def relu(z):
      return max(0, z)
    

    所以,当您看到它将所有负值挤压为零,只能让正值通过。

    因此,所有这些值都是零的(术语:在Relu术语中称为死神经元,这是非常自然的,这是RNN中的一个大问题,并且在CNN中没有那么多) P>

    【讨论】:

      猜你喜欢
      • 2019-06-07
      • 2020-08-06
      • 2012-10-19
      • 2017-09-12
      • 1970-01-01
      • 2020-07-31
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多