# 2. 基本原理

1，一个用于内容D_C;
2，一个用于风格D_S。
D_C度量两张图片内容上的区别，而D_S用来测量两张图片风格的区别。

# 3 准备工作

1. torch, torch.nn(使用PyTorch进行风格转换必不可少的包)
2. numpy (矩阵处理必须用)
3. torch.optim (高效的梯度下降)
4. PIL, PIL.Image, matplotlib.pyplot (加载和展示图片)
5. torchvision.transforms (将PIL图片转换成张量)
6. torchvision.models (训练或加载预训练模型)
7. copy (对模型进行深度拷贝；系统包)
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from PIL import Image
import matplotlib.pyplot as plt
import torchvision.transforms as transforms
import torchvision.models as models
import copy
import warnings
warnings.filterwarnings("ignore")


if torch,cuda.is_available():
device=torch.device("cuda")
else:
device=torch.device("cpu")


# 4 加载素材

# desired size of the output image
imsize = 512 if torch.cuda.is_available() else 128  # use small size if no gpu

transforms.Resize(imsize),  # scale imported image
transforms.ToTensor()])  # transform it into a torch tensor

image = Image.open(image_name)
# fake batch dimension required to fit network's input dimensions
image = loader(image).unsqueeze(0) #添加一个0维度 batch 适应网络输入
return image.to(device, torch.float)

assert style_img.size() == content_img.size(), \
"we need to import style and content images of the same size"


unloader = transforms.ToPILImage()  # reconvert into PIL image

plt.ion()

def imshow(tensor, title=None):
image = tensor.cpu().clone()  # we clone the tensor to not do changes on it
image = image.squeeze(0)      # remove the fake batch dimension 去掉0维度
plt.imshow(image)
if title is not None:
plt.title(title)
plt.pause(0.001) # pause a bit so that plots are updated

plt.figure()
imshow(style_img, title='Style Image')

plt.figure()
imshow(content_img, title='Content Image')


• 点赞
• 评论
• 分享
x

海报分享

扫一扫，分享海报

• 收藏 1
• 手机看

分享到微信朋友圈

x

扫一扫，手机阅读

• 打赏

打赏

Big_quant

你的鼓励将是我创作的最大动力

C币 余额
2C币 4C币 6C币 10C币 20C币 50C币
• 一键三连

点赞Mark关注该博主, 随时了解TA的最新博文
04-17 2555

01-12 452
10-26 3912
10-01 1194
02-18 102