Inception score
作用
评估GAN模型的指标,评价生成的图片集合的好坏
特点
- 单一样本的独特性:哪个样本属于哪一类的确定性很大(p(y|x)的某一个值很大其他值很小,即熵很小)
最小化
- 多样本间的差异性:结果有很多类 (p(y)的各个值相差不大,即熵很大)
最大化
综合起来就是
-
展开
因为实际当中,我们无法计算积分,就采用蒙特卡罗的方法,将积分计算换成求和:
实际计算中,我们一般把所有数据分成几份,我们对每一份数据进行上面的计算,然后计算这几份数据的平均值和方差。
代码
(官方)https://github.com/openai/improved-gan/blob/master/inception_score/model.py
def preds2score(preds,splits): # 公式
'''
:param preds: 总数据
:param splits: 数据被分成的份数
:return: inception score
'''
scores = []
for i in range(splits):
part = preds[(i * preds.shape[0] // splits):((i + 1) * preds.shape[0] // splits), :]
kl = part * (np.log(part) - np.log(np.expand_dims(np.mean(part, 0), 0)))
kl = np.mean(np.sum(kl, 1))
scores.append(np.exp(kl))
return np.mean(scores), np.std(scores)