| 
                         示例模型使用对应于印度大象类别的随机输入,输出了以下内容: 
  
从图像中可以看到,模型期望的结构为象牙、大眼睛和象鼻。这些信息可以有效帮助检查数据集的完整性。例如,假设该模型将关注的特征理解为背景中的树木或草丛等其它物体,由于印度象的栖息地中往往含有大量的树木或草丛,模型就可能产生错误。然后,通过最大激活,就会发现已有的数据集可能不足以完成任务,因此需要将生活在不同栖息地的大象图像添加到训练集中,实现大象特征的准确辨别。 
遮挡图——将输入过程的重要部分可视化 
激活最大化主要用于将图像中模型的期待可视化。而图像遮挡可以找出图像中对模型来说至关重要的部分。 
现在,为了理解图像遮挡的工作原理,我们设立了一个模型,它能够根据丰田、奥迪等制造商对汽车进行分类。 
  
能够判断图中汽车属于哪家公司吗?一定很难吧。因为公司标识所在的部分被遮挡了。显然,图像中被遮挡部分是辨别汽车所属厂商时非常重要的线索。 
同样地,为了生成遮挡图,我们遮挡了图像中的某些部分,然后计算它属于某一类的概率。如果概率降低,就意味着遮挡部分对于完成分类非常重要。否则,该部分就无足轻重了。 
示例程序将概率同图像每个部分的像素值联系起来,对其进行标准化后生成热图: 
- import numpy as np 
 -  
 - from keras.utils import np_utils 
 - from keras.models import Sequential 
 - from keras.layers import Dense, Dropout, Flatten, Activation, Conv2D, MaxPooling2D 
 - from keras.optimizers import Adam 
 - from keras.callbacks import EarlyStopping, ModelCheckpoint 
 - from keras.preprocessing.image import ImageDataGenerator 
 - from keras.activations import relu 
 -  
 - %matplotlib inline 
 - import matplotlib.pyplot as plt 
 - def iter_occlusion(image, size=8): 
 -  
 -     occlusion = np.full((size * 5, size * 5, 1), [0.5], np.float32) 
 -     occlusion_center = np.full((size, size, 1), [0.5], np.float32) 
 -     occlusion_padding = size * 2 
 -  
 -     # print('padding…') 
 -     image_padded = np.pad(image, (  
 -                         (occlusion_padding, occlusion_padding), (occlusion_padding, occlusion_padding), (0, 0)  
 -                         ), 'constant', constant_values = 0.0) 
 -  
 -     for y in range(occlusion_padding, image.shape[0] + occlusion_padding, size): 
 -  
 -         for x in range(occlusion_padding, image.shape[1] + occlusion_padding, size): 
 -             tmp = image_padded.copy() 
 -  
 -             tmp[y - occlusion_padding:y + occlusion_center.shape[0] + occlusion_padding,  
 -                 x - occlusion_padding:x + occlusion_center.shape[1] + occlusion_padding]  
 -                 = occlusion 
 -  
 -             tmp[y:y + occlusion_center.shape[0], x:x + occlusion_center.shape[1]] = occlusion_center 
 -  
 -             yield x - occlusion_padding, y - occlusion_padding,  
 -                   tmp[occlusion_padding:tmp.shape[0] - occlusion_padding, occlusion_padding:tmp.shape[1] - occlusion_padding] 
 
  
上述代码定义的函数iter_occlusion能够生成具有不同遮挡部分的图像。                         (编辑:我爱故事小小网_铜陵站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |