这是我参加8月更文应战的第14天,活动概略查看:8月更文应战
Deep Learning with Python
这篇文章是我学习《Deep Learning with Python》(第二版,Frano神经网络算法三大类is Chollet 著) 时写的系列笔教程英文记之一。文章的内容是从 Jupyter notebooks 转成 Markdown 的,你能够去 GitHuhttpwatchb 或 Gitee 找到原始的 .ip神经网络算法ynb
笔记本。
你能够去这个网站在线阅读这本书的正版原文(英文)。这本书的作者也给出了配套的 Jupyte神经网络算法三大类r notebooks。
本文为 第8章 生成式深度学习 (Chapter 8. Gener教程丈量体温视频ative deep learning) 的笔记之一。
8.2 DeepDream
DeepDream 是一种让机器修改图画技术,它运用卷积神经网络,能够作出很迷幻的图画:
因为 DeepDhttps和http的差异ream 用的 CNN 是在 ImageNet 上练习的,而 ImageNet 里有许多的动物图片,所以,DeepDre教程诀窍2am 生成的图画里有许多动物、git命令动物的一部分的伪影。
DeepDream 运用的算法与卷积神经网络过滤器可视化技术很类似。回想一下,卷积神经网络过梯度自愿和平行自愿的差异滤器可视化所做的操作是:反向工作HTTP卷积神经网络,从一张教程丈量体温视频带随机噪点的空白图画输入,做梯度上升,使某过滤器激活最大化。
DeepDream 与过滤器可视化的主要差异在于:
- 在 DeepDream 中,咱们查验将全部层的激活最大化,而不只是某一层,这样,会有许多的可视化特征混合在一同——生成更加迷梯度怎样求幻的图画。
- 从一张现有的图画开始,而不是从随机噪点的输入开始,这样生成的图画中会包括输入图画中已存神经网络算法三大类在的梯度洗脱视觉方法,并以将其间github是干什么的的一些元素歪曲——生成更加迷幻的图画。
- 输入图画会在不同的标准上进行处理——这些标准称为「八度」(octave),这能够前进输出的质量。
用 Keras 结束 DeepDream
在开始之前,梯度电费是怎样收费的咱们需求封闭 Tensorflow梯度下降 2.x 的及时实行方法,参阅http 500 tensorflohttp://192.168.1.1登录w #33HTTP135。
import tenso神经网络猜测模型rflo梯度w as tf
tf.compat.v1.disable_eager_execution()
然后第一步,选定一个在 ImageNet 上预练习的卷积神经网络:VGG16、Inception、ResNet50 等等都能够。实践证明,Inception 能够生成的比较好,所以这儿咱们运用 Keras 内置的 Inception V3 模型。
加载预练习的 Inception V3 模型:
from tensorflow.keras.applications import inception_v3
from tensorflow.keras import b神经网络算法ackend as K
K.set_learning_phase(0)
model = inception_v3.InceptionV3(weight神经网络s='imagenet', include_top=False)
接下httpwatch来界说丢掉——需求用梯度上升最大化的量。DeepDream 中,咱们要一同将多个层的全部过滤器激教程地图活最大化。具体的http署理结束是:对一组神经网络原理靠近顶部的层激活的 L2 范数教程画画进行教程图片加权求和,然后求出这个值的最大化。层的神经网络算法原理挑选、以及权重分配教程丈量体温视频对生成的作用影响很大:
- 靠近底部的层会生成底子的几许图画;
- 靠近顶部的层会生梯度怎样求成能够看出某些物品的图画(ImageNet 中的图画,比如鸟或狗https和http的差异)
输出 Incep教程丈量体温视频tion V3梯度下降 模型的结构(能够用 tf.keras.utils.plot_model(model)
),在其间随便选几个层,这儿挑选神经网络引擎是什么意思了 mixgithup官网ed4、mihttp://www.baidu.comxed5、mixed6 和 mixed7。
把这些要用的层写到 DeepDream 配备里:
layer_contributions = {
'mixed4': 0.0,
'mixed5': 3.0,
'mixed6': 2.0,
'mixed7': 1.5,
}
然后咱们需求求关于这些被选中层的丢掉。界说需求最大化的丢掉:
layer_dic教程丈量体温视频t = dict([(layer.name, layer) for layer in model.layers])
loss = K.variable(0.)
fo教程的意思r layer_name in layer_contributio教程英文ns:
coeff = layer_contributions[layer_name]
actigithup官网vation = l神经网络算法三大类ayer_dict[layer_name].outpgit教程ut
scaling =神经网络算法 K.progit教程d(K.cast(K.shape(activation), 'float32'))
# loss += coeff * K.sum(K.square(activation[:, 2: -2, :])) / scaling
# 应该用下面的代码。参阅http 404:https://github.com/fchollet/deep-learning-with-python-notebo教程英文oks/issues/43
loss = loss + coeff * KGit.sum(K.square(acthttp://192.168.1.1登录ivation[:, 2: -2, :])) / scaling
对丢掉做梯http 404度上升:
dream = model.input
grads = K.gradients(loss, drea教程的意思m)[0]
grads /= K.max梯度怎样求imum(K.mean(K.abs(grads)), 1e-7)
outputs = [loss, grads]教程的意思
fetch_loss_and_grads = K.function([dream], outputs)
def eval_losshttp署理_and_grads(教程英文x):
ohttp 404uts = fetch_loss_and_grads([x])
loss_value = outs[0]
grad_values = outs[1]
return loss_value, grad_values
def gradient_ascent(x, iterations,神经网络激活函数 step, max_loss=None):
for i in range(iterations):
loss_value, grad_values = eval_loss_and_grads(x)
if max_loss is not None andgithub中文官网网页 loss_value > max_loss:
break
print(f' loss value at {i}: {lo神经网络ss_value}')
x += step * grad_values
return x
最后,结束 DeepDream 算法:教程英文先界说一个标准(scales,也叫做八度,octaves)列表,里边包括要处理的图画。后一教程画画个标准的图画比前一个扩展一定的倍数。GitDeepDream 要依照这个列表从最小到最大,在其时标准工作梯度上升,然后将得到的图画扩展git教程。扩展之后,图画会变得含糊,git教程所以还http 404要将丢掉的细节从头注入到图画中。
一些辅佐函数:
import scipy
imporgitlabt imageio
from tensorflow.keras.preprocessing i梯度用电怎样核算mport image
def resize_img(img, size):
img = np.copy(img)
factors = (1,
float(size[0]) / img.梯度自愿和平行自愿的差异shape[1],
float(size[1]) / img.shape[2],
1)
return scipy.ndimage.zoo神经网络引擎是什么意思m(img, factors, order=1)
def save_img(img, fname):
pil_img = deprocess_image(np.copy(img梯度自愿是什么意思))
# scipy.misc.imsave(fname, pGitil_img)
imageio.imsave(fname, pil_img)
翻开图画,改动图画大小,并将图画格式转换为 I教程英文nception V3 模型能够处理的张量:教程地图
def preprocess_image(image_path):
im梯度g = image.load_img(image_path)
img = image.igithub是干什么的mg_to_array教程snapchat下载(教程之家img)
img = np.expa神经网络算法nd_dims(img, axi梯度自愿s=0)
img = inception_v3.preprocess_input(img)
return img
将一个张量转换为有用图画:
def depro教程网站cess_image(x):
if K.image_data_format() == 'channels_first':
x = x.reshape((3, x.shape[2], x.shape[3]教程英文))
x = x.transpose((1, 2, 0))
else:
x = x.r教程eshape((x.shape[1], x.shape[2], 3))
x /= 2.
x += 0.5
x *= 255.
x = np.clip(x, 0, 255).astype('uint8')
retuhttps和http的差异rn x
在多个接连标准上工作梯度上升:
import numpy as np
step = 0.01 # 梯度上升的步长
num_octave = 3 # 标准个数
octave_scale = 1.4 # 两个标准的大小教程图片份额
iteratio梯度电费是怎样收费的ns = 20 # 在每个标准上工作梯度上升的步数
max_loss = 10. # 丢掉上神经网络原理升的太大时间断梯度上升,避免得到丑陋的伪影
base_image_path = './img.png'
img = p教程丈量体温视频reprocess_ima梯度电费是怎样收费的ge(base_image_神经网络path)
original_shape = img.shape[1:3]
successive_shapes = [original_shape]
fo教程snapchat下载r梯度怎样求 i教程之家 in range(1, num_octave):
shape = tuple([dim // (octave_scale ** i)
for dim in original_shape])
successive_shapes.append(shape)
successive_shapes = successive_shapes[::-1]
orig神经网络算法原理inal_img = np.copy(img)
shrunk_original_img = resize_img(img, successive_shapes[0])
for shape in successive神经网络激活函数_shapes:
print('Process神经网络猜测模型ing image shape', shape)
img = resize神经网络原理_img(img, sh教程地图ape)
img = grahttp署理dient_ascent(im梯度下降法g,
iterations=igit教程terations,github是干什么的
step=step,
max_loss=max_github是干什么的loss)
upscaled_shrunk_original_img = resi神经网络算法原理ze_img(shrunk_original_img, shape)github是干什么的
same_size_origina教程地图l = resize_img(original_img, shape)
lost_detail = same_size_original - upscaled_shrunk_original_img
img += lost_detail
shrunk_original_img = resize_img(origi梯度nal_img, shape)
save_img(img, fname=f'dream_at_scale_{shape}.png')
save_img(img, fname='final_dream.png')
终究得到的作用:
能够看到 DeepDream 在 final_dream 图片里,画上了几只狗。
注:因为 Inception V3 原始练习的标准的原因,这儿结束的 DeepDream 结束在标准介于 300300 和 400400 之间的图画上可教程丈量体温视频以得到更好的作用,不过这神经网络猜测模型不是严厉的束缚,任何标准的都是能够的。
注:运用 TensorfFlow 2 的 eager 方法,也能够很容易地结束一个更好的 DeepD神经网络ream,详见这篇 TensorFlow 的官方教程。