deep_dream算法总结

深度学习(正向传播即分类,反向传播即生成):
1、经过训练后每一层都会逐步提取图像的更高层次特征,直到最后一层基本上决定图像显示的内容。

2、特征变化趋势:边缘和拐角(轮廓) => 整体的特征(文理和笔触等) => 越来越多的复杂特征


deep_drean的整体思想:

  •   输入任务无关的图片,通过网络提取特征,反向传播更新图片中的像素点(非新网络参数),不断迭代让网络越来越相信输入图片属于分类任务中的某一类。
  •   网络不断更新图片像素来最大化L2范数,使得提取的特征越来越大,经过网络之后提取的特征更像网络希望提取的特征
  •   本质上:一个梯度上升过程,试图最大化特定层激活的L2范数

 

deep_dream的训练技巧:
1、随机抖动偏移图像,产生噪声,加快训练

shift_x, shift_y = np.random.randint(-max_jitter, max_jitter + 1, 2)
img = np.roll(np.roll(img, shift_x, -1), shift_y, -2)  # 数组沿着一个维度进行平移

2、规则化梯度上升步长的幅度
3、在多个尺度上应用上升

 

如何控制梦境?

即控制图片中出现的东西(调整优化的目标,将原始图像向另一张图像逼近,可以定义一个指向性的优化目标):
step1:输入一张图片作为梦境的控制图片
step2:控制图片经网络前向传播得到特征向量t1,而原始图片也得到特征向量t2
step3:比较特征向量t1和t2,(1)将它们重新排列成新的矩阵,(2)做矩阵乘法,(3)选择矩阵乘法中最大的下标
step4:将step3中下标对应的原始图片的特征向量作为新的特征向量,这些特征向量被认为是最匹配控制图片特征向量的,
step5:done!实现控制梦境!

 

keras实现注意点:

1、预训练模型采用inception_v3,inception_v3中数据预处理是将像素点缩放到[-1, 1](除以255,减去0.5,乘以2),deep_dream将最大化后的图片数组生成图片的时候,需要从[-1, 1]反向到[0, 255](乘以2,加上0.5, 乘以255)

2、

 

 

 

-- 未完待续 --

你可能感兴趣的:(deep,learning)