色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PyTorch教程-14.12. 神經風格遷移

jf_pJlTbmA9 ? 來源:PyTorch ? 作者:PyTorch ? 2023-06-05 15:44 ? 次閱讀

如果你是攝影愛好者,你可能對濾鏡并不陌生。它可以改變照片的色彩風格,使風景照片變得更清晰或肖像照片皮膚變白。但是,一個濾鏡通常只會改變照片的一個方面。要為照片應用理想的風格,您可能需要嘗試多種不同的濾鏡組合。這個過程與調整模型的超參數一樣復雜。

在本節中,我們將利用 CNN 的分層表示將一幅圖像的風格自動應用到另一幅圖像,即 風格遷移 (Gatys等人,2016 年)。此任務需要兩張輸入圖像:一張是內容圖像,另一張是風格圖像。我們將使用神經網絡修改內容圖像,使其在風格上接近風格圖像。例如 圖14.12.1中的內容圖片是我們在西雅圖郊區雷尼爾山國家公園拍攝的風景照,而風格圖是一幅以秋天的橡樹為主題的油畫。在輸出的合成圖像中,應用了樣式圖像的油畫筆觸,使顏色更加鮮艷,同時保留了內容圖像中對象的主要形狀。

poYBAGR9PAyAD4TXACzLlevRbk4394.svg

圖 14.12.1給定內容和風格圖像,風格遷移輸出合成圖像。

14.12.1。方法

圖 14.12.2用一個簡化的例子說明了基于 CNN 的風格遷移方法。首先,我們將合成圖像初始化為內容圖像。這張合成圖像是風格遷移過程中唯一需要更新的變量,即訓練期間要更新的模型參數。然后我們選擇一個預訓練的 CNN 來提取圖像特征并在訓練期間凍結其模型參數。這種深度 CNN 使用多層來提取圖像的層次特征。我們可以選擇其中一些層的輸出作為內容特征或樣式特征。如圖14.12.2舉個例子。這里的預訓練神經網絡有 3 個卷積層,其中第二層輸出內容特征,第一層和第三層輸出風格特征。

pYYBAGR9PBGAHsKTAAxCCRcH-98436.svg

圖 14.12.2基于 CNN 的風格遷移過程。實線表示正向傳播方向,虛線表示反向傳播。

接下來,我們通過正向傳播(實線箭頭方向)計算風格遷移的損失函數,并通過反向傳播(虛線箭頭方向)更新模型參數(輸出的合成圖像)。風格遷移中常用的損失函數由三部分組成:(i)內容損失使合成圖像和內容圖像在內容特征上接近;(ii)風格損失使得合成圖像和風格圖像在風格特征上接近;(iii) 總變差損失有助于減少合成圖像中的噪聲。最后,當模型訓練結束后,我們輸出風格遷移的模型參數,生成最終的合成圖像。

下面,我們將通過一個具體的實驗來解釋風格遷移的技術細節。

14.12.2。閱讀內容和樣式圖像

首先,我們閱讀內容和樣式圖像。從它們打印的坐標軸,我們可以看出這些圖像具有不同的尺寸。

%matplotlib inline
import torch
import torchvision
from torch import nn
from d2l import torch as d2l

d2l.set_figsize()
content_img = d2l.Image.open('../img/rainier.jpg')
d2l.plt.imshow(content_img);

poYBAGR9PBSAQji4AAJilAS7Cj4664.svg

style_img = d2l.Image.open('../img/autumn-oak.jpg')
d2l.plt.imshow(style_img);

pYYBAGR9PBmAZ-kLAAMLjwnT-xs129.svg

%matplotlib inline
from mxnet import autograd, gluon, image, init, np, npx
from mxnet.gluon import nn
from d2l import mxnet as d2l

npx.set_np()

d2l.set_figsize()
content_img = image.imread('../img/rainier.jpg')
d2l.plt.imshow(content_img.asnumpy());

poYBAGR9PBSAQji4AAJilAS7Cj4664.svg

style_img = image.imread('../img/autumn-oak.jpg')
d2l.plt.imshow(style_img.asnumpy());

pYYBAGR9PBmAZ-kLAAMLjwnT-xs129.svg

14.12.3。預處理和后處理

下面,我們定義了兩個用于預處理和后處理圖像的函數。該preprocess函數對輸入圖像的三個 RGB 通道中的每一個進行標準化,并將結果轉換為 CNN 輸入格式。該postprocess函數將輸出圖像中的像素值恢復為標準化前的原始值。由于圖像打印功能要求每個像素都有一個從0到1的浮點值,我們將任何小于0或大于1的值分別替換為0或1。

rgb_mean = torch.tensor([0.485, 0.456, 0.406])
rgb_std = torch.tensor([0.229, 0.224, 0.225])

def preprocess(img, image_shape):
  transforms = torchvision.transforms.Compose([
    torchvision.transforms.Resize(image_shape),
    torchvision.transforms.ToTensor(),
    torchvision.transforms.Normalize(mean=rgb_mean, std=rgb_std)])
  return transforms(img).unsqueeze(0)

def postprocess(img):
  img = img[0].to(rgb_std.device)
  img = torch.clamp(img.permute(1, 2, 0) * rgb_std + rgb_mean, 0, 1)
  return torchvision.transforms.ToPILImage()(img.permute(2, 0, 1))

rgb_mean = np.array([0.485, 0.456, 0.406])
rgb_std = np.array([0.229, 0.224, 0.225])

def preprocess(img, image_shape):
  img = image.imresize(img, *image_shape)
  img = (img.astype('float32') / 255 - rgb_mean) / rgb_std
  return np.expand_dims(img.transpose(2, 0, 1), axis=0)

def postprocess(img):
  img = img[0].as_in_ctx(rgb_std.ctx)
  return (img.transpose(1, 2, 0) * rgb_std + rgb_mean).clip(0, 1)

14.12.4。提取特征

我們使用在 ImageNet 數據集上預訓練的 VGG-19 模型來提取圖像特征( Gatys et al. , 2016 )。

pretrained_net = torchvision.models.vgg19(pretrained=True)

pretrained_net = gluon.model_zoo.vision.vgg19(pretrained=True)

為了提取圖像的內容特征和風格特征,我們可以選擇VGG網絡中某些層的輸出。一般來說,越靠近輸入層越容易提取圖像的細節,反之越容易提取圖像的全局信息。為了避免在合成圖像中過度保留內容圖像的細節,我們選擇了一個更接近輸出的VGG層作為內容層來輸出圖像的內容特征。我們還選擇不同 VGG 層的輸出來提取局部和全局風格特征。這些圖層也稱為樣式圖層。如第 8.2 節所述,VGG 網絡使用 5 個卷積塊。在實驗中,我們選擇第四個卷積塊的最后一個卷積層作為內容層,每個卷積塊的第一個卷積層作為樣式層。這些層的索引可以通過打印pretrained_net實例來獲得。

style_layers, content_layers = [0, 5, 10, 19, 28], [25]

style_layers, content_layers = [0, 5, 10, 19, 28], [25]

當使用 VGG 層提取特征時,我們只需要使用從輸入層到最接近輸出層的內容層或樣式層的所有那些。讓我們構建一個新的網絡實例net,它只保留所有用于特征提取的 VGG 層。

net = nn.Sequential(*[pretrained_net.features[i] for i in
           range(max(content_layers + style_layers) + 1)])

net = nn.Sequential()
for i in range(max(content_layers + style_layers) + 1):
  net.add(pretrained_net.features[i])

給定輸入X,如果我們簡單地調用前向傳播 net(X),我們只能得到最后一層的輸出。由于我們還需要中間層的輸出,因此我們需要逐層計算并保留內容層和樣式層的輸出。

def extract_features(X, content_layers, style_layers):
  contents = []
  styles = []
  for i in range(len(net)):
    X = net[i](X)
    if i in style_layers:
      styles.append(X)
    if i in content_layers:
      contents.append(X)
  return contents, styles

def extract_features(X, content_layers, style_layers):
  contents = []
  styles = []
  for i in range(len(net)):
    X = net[i](X)
    if i in style_layers:
      styles.append(X)
    if i in content_layers:
      contents.append(X)
  return contents, styles

下面定義了兩個函數:get_contents函數從內容圖像中提取內容特征,函數get_styles從風格圖像中提取風格特征。由于在訓練期間不需要更新預訓練 VGG 的模型參數,我們甚至可以在訓練開始之前提取內容和風格特征。由于合成圖像是一組需要更新的模型參數以進行風格遷移,因此我們只能extract_features 在訓練時通過調用函數來提取合成圖像的內容和風格特征。

def get_contents(image_shape, device):
  content_X = preprocess(content_img, image_shape).to(device)
  contents_Y, _ = extract_features(content_X, content_layers, style_layers)
  return content_X, contents_Y

def get_styles(image_shape, device):
  style_X = preprocess(style_img, image_shape).to(device)
  _, styles_Y = extract_features(style_X, content_layers, style_layers)
  return style_X, styles_Y

def get_contents(image_shape, device):
  content_X = preprocess(content_img, image_shape).copyto(device)
  contents_Y, _ = extract_features(content_X, content_layers, style_layers)
  return content_X, contents_Y

def get_styles(image_shape, device):
  style_X = preprocess(style_img, image_shape).copyto(device)
  _, styles_Y = extract_features(style_X, content_layers, style_layers)
  return style_X, styles_Y

14.12.5。定義損失函數

現在我們將描述風格遷移的損失函數。損失函數包括內容損失、風格損失和全變損失。

14.12.5.1。內容丟失

類似于線性回歸中的損失函數,內容損失通過平方損失函數衡量合成圖像和內容圖像之間內容特征的差異。平方損失函數的兩個輸入都是該extract_features函數計算的內容層的輸出。

def content_loss(Y_hat, Y):
  # We detach the target content from the tree used to dynamically compute
  # the gradient: this is a stated value, not a variable. Otherwise the loss
  # will throw an error.
  return torch.square(Y_hat - Y.detach()).mean()

def content_loss(Y_hat, Y):
  return np.square(Y_hat - Y).mean()

14.12.5.2。風格損失

風格損失與內容損失類似,也是使用平方損失函數來衡量合成圖像與風格圖像之間的風格差異。為了表達任何樣式層的樣式輸出,我們首先使用函數extract_features來計算樣式層輸出。假設輸出有 1 個示例,c渠道,高度 h, 和寬度w,我們可以將此輸出轉換為矩陣 X和c行和hw列。這個矩陣可以被認為是串聯c載體 x1,…,xc, 其中每一個的長度為hw. 在這里,矢量xi表示頻道的風格特征i.

在這些向量的 Gram 矩陣中XX?∈Rc×c, 元素 xij在排隊i和專欄j是向量的點積xi和xj. 表示渠道風格特征的相關性i和 j. 我們使用這個 Gram 矩陣來表示任何樣式層的樣式輸出。請注意,當值hw越大,它可能會導致 Gram 矩陣中的值越大。還要注意,Gram矩陣的高和寬都是通道數c. 為了讓風格損失不受這些值的影響,gram 下面的函數將 Gram 矩陣除以其元素的數量,即chw.

def gram(X):
  num_channels, n = X.shape[1], X.numel() // X.shape[1]
  X = X.reshape((num_channels, n))
  return torch.matmul(X, X.T) / (num_channels * n)

def gram(X):
  num_channels, n = X.shape[1], d2l.size(X) // X.shape[1]
  X = X.reshape((num_channels, n))
  return np.dot(X, X.T) / (num_channels * n)

顯然,風格損失的平方損失函數的兩個格拉姆矩陣輸入是基于合成圖像和風格圖像的風格層輸出。這里假設 gram_Y基于風格圖像的 Gram 矩陣已經預先計算好了。

def style_loss(Y_hat, gram_Y):
  return torch.square(gram(Y_hat) - gram_Y.detach()).mean()

def style_loss(Y_hat, gram_Y):
  return np.square(gram(Y_hat) - gram_Y).mean()

14.12.5.3。總變異損失

有時,學習到的合成圖像有很多高頻噪聲,即特別亮或特別暗的像素。一種常見的降噪方法是全變差去噪。表示為 xi,j坐標處的像素值(i,j). 減少總變異損失

(14.12.1)∑i,j|xi,j?xi+1,j|+|xi,j?xi,j+1|

使合成圖像上相鄰像素的值更接近。

def tv_loss(Y_hat):
  return 0.5 * (torch.abs(Y_hat[:, :, 1:, :] - Y_hat[:, :, :-1, :]).mean() +
         torch.abs(Y_hat[:, :, :, 1:] - Y_hat[:, :, :, :-1]).mean())

def tv_loss(Y_hat):
  return 0.5 * (np.abs(Y_hat[:, :, 1:, :] - Y_hat[:, :, :-1, :]).mean() +
         np.abs(Y_hat[:, :, :, 1:] - Y_hat[:, :, :, :-1]).mean())

14.12.5.4。損失函數

風格遷移的損失函數是內容損失、風格損失和總變異損失的加權和。通過調整這些權重超參數,我們可以在合成圖像的內容保留、風格遷移和降噪之間取得平衡。

content_weight, style_weight, tv_weight = 1, 1e4, 10

def compute_loss(X, contents_Y_hat, styles_Y_hat, contents_Y, styles_Y_gram):
  # Calculate the content, style, and total variance losses respectively
  contents_l = [content_loss(Y_hat, Y) * content_weight for Y_hat, Y in zip(
    contents_Y_hat, contents_Y)]
  styles_l = [style_loss(Y_hat, Y) * style_weight for Y_hat, Y in zip(
    styles_Y_hat, styles_Y_gram)]
  tv_l = tv_loss(X) * tv_weight
  # Add up all the losses
  l = sum(styles_l + contents_l + [tv_l])
  return contents_l, styles_l, tv_l, l

content_weight, style_weight, tv_weight = 1, 1e4, 10

def compute_loss(X, contents_Y_hat, styles_Y_hat, contents_Y, styles_Y_gram):
  # Calculate the content, style, and total variance losses respectively
  contents_l = [content_loss(Y_hat, Y) * content_weight for Y_hat, Y in zip(
    contents_Y_hat, contents_Y)]
  styles_l = [style_loss(Y_hat, Y) * style_weight for Y_hat, Y in zip(
    styles_Y_hat, styles_Y_gram)]
  tv_l = tv_loss(X) * tv_weight
  # Add up all the losses
  l = sum(styles_l + contents_l + [tv_l])
  return contents_l, styles_l, tv_l, l

14.12.6. 初始化合成圖像

在風格遷移中,合成圖像是訓練期間唯一需要更新的變量。因此,我們可以定義一個簡單的模型, SynthesizedImage并將合成圖像作為模型參數。在這個模型中,前向傳播只返回模型參數。

class SynthesizedImage(nn.Module):
  def __init__(self, img_shape, **kwargs):
    super(SynthesizedImage, self).__init__(**kwargs)
    self.weight = nn.Parameter(torch.rand(*img_shape))

  def forward(self):
    return self.weight

class SynthesizedImage(nn.Block):
  def __init__(self, img_shape, **kwargs):
    super(SynthesizedImage, self).__init__(**kwargs)
    self.weight = self.params.get('weight', shape=img_shape)

  def forward(self):
    return self.weight.data()

接下來,我們定義get_inits函數。此函數創建一個合成圖像模型實例并將其初始化為 image X。styles_Y_gram在訓練之前計算各種樣式層的樣式圖像的 Gram 矩陣 。

def get_inits(X, device, lr, styles_Y):
  gen_img = SynthesizedImage(X.shape).to(device)
  gen_img.weight.data.copy_(X.data)
  trainer = torch.optim.Adam(gen_img.parameters(), lr=lr)
  styles_Y_gram = [gram(Y) for Y in styles_Y]
  return gen_img(), styles_Y_gram, trainer

def get_inits(X, device, lr, styles_Y):
  gen_img = SynthesizedImage(X.shape)
  gen_img.initialize(init.Constant(X), ctx=device, force_reinit=True)
  trainer = gluon.Trainer(gen_img.collect_params(), 'adam',
              {'learning_rate': lr})
  styles_Y_gram = [gram(Y) for Y in styles_Y]
  return gen_img(), styles_Y_gram, trainer

14.12.7. 訓練

在訓練風格遷移模型時,我們不斷提取合成圖像的內容特征和風格特征,并計算損失函數。下面定義了訓練循環。

def train(X, contents_Y, styles_Y, device, lr, num_epochs, lr_decay_epoch):
  X, styles_Y_gram, trainer = get_inits(X, device, lr, styles_Y)
  scheduler = torch.optim.lr_scheduler.StepLR(trainer, lr_decay_epoch, 0.8)
  animator = d2l.Animator(xlabel='epoch', ylabel='loss',
              xlim=[10, num_epochs],
              legend=['content', 'style', 'TV'],
              ncols=2, figsize=(7, 2.5))
  for epoch in range(num_epochs):
    trainer.zero_grad()
    contents_Y_hat, styles_Y_hat = extract_features(
      X, content_layers, style_layers)
    contents_l, styles_l, tv_l, l = compute_loss(
      X, contents_Y_hat, styles_Y_hat, contents_Y, styles_Y_gram)
    l.backward()
    trainer.step()
    scheduler.step()
    if (epoch + 1) % 10 == 0:
      animator.axes[1].imshow(postprocess(X))
      animator.add(epoch + 1, [float(sum(contents_l)),
                   float(sum(styles_l)), float(tv_l)])
  return X

def train(X, contents_Y, styles_Y, device, lr, num_epochs, lr_decay_epoch):
  X, styles_Y_gram, trainer = get_inits(X, device, lr, styles_Y)
  animator = d2l.Animator(xlabel='epoch', ylabel='loss',
              xlim=[10, num_epochs], ylim=[0, 20],
              legend=['content', 'style', 'TV'],
              ncols=2, figsize=(7, 2.5))
  for epoch in range(num_epochs):
    with autograd.record():
      contents_Y_hat, styles_Y_hat = extract_features(
        X, content_layers, style_layers)
      contents_l, styles_l, tv_l, l = compute_loss(
        X, contents_Y_hat, styles_Y_hat, contents_Y, styles_Y_gram)
    l.backward()
    trainer.step(1)
    if (epoch + 1) % lr_decay_epoch == 0:
      trainer.set_learning_rate(trainer.learning_rate * 0.8)
    if (epoch + 1) % 10 == 0:
      animator.axes[1].imshow(postprocess(X).asnumpy())
      animator.add(epoch + 1, [float(sum(contents_l)),
                   float(sum(styles_l)), float(tv_l)])
  return X

現在我們開始訓練模型。我們將內容和樣式圖像的高度和寬度重新調整為 300 x 450 像素。我們使用內容圖像來初始化合成圖像。

device, image_shape = d2l.try_gpu(), (300, 450) # PIL Image (h, w)
net = net.to(device)
content_X, contents_Y = get_contents(image_shape, device)
_, styles_Y = get_styles(image_shape, device)
output = train(content_X, contents_Y, styles_Y, device, 0.3, 500, 50)

pYYBAGR9PCOAVzxPAALdi2cLvzA330.svg

device, image_shape = d2l.try_gpu(), (450, 300)
net.collect_params().reset_ctx(device)
content_X, contents_Y = get_contents(image_shape, device)
_, styles_Y = get_styles(image_shape, device)
output = train(content_X, contents_Y, styles_Y, device, 0.9, 500, 50)

poYBAGR9PCeAFdwbAANZAkSHWx4949.svg

我們可以看到,合成圖保留了內容圖的景物和物體,同時傳遞了風格圖的顏色。例如,合成圖像具有風格圖像中的顏色塊。其中一些塊甚至具有筆觸的微妙紋理。

14.12.8。概括

風格遷移中常用的損失函數由三部分組成:(i)內容損失使合成圖像和內容圖像在內容特征上接近;(ii) 風格損失使得合成圖像和風格圖像在風格特征上接近;(iii) 總變差損失有助于減少合成圖像中的噪聲。

我們可以使用預訓練的 CNN 提取圖像特征并最小化損失函數,以在訓練期間不斷更新合成圖像作為模型參數。

我們使用 Gram 矩陣來表示樣式層的樣式輸出。

14.12.9。練習

當您選擇不同的內容和樣式層時,輸出如何變化?

調整損失函數中的權重超參數。輸出是保留更多內容還是噪音更少?

使用不同的內容和樣式圖像。你能創造出更有趣的合成圖像嗎?

我們可以對文本應用樣式轉換嗎?提示:您可以參考Hu等人的調查論文。( 2022 )。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cnn
    cnn
    +關注

    關注

    3

    文章

    353

    瀏覽量

    22246
  • pytorch
    +關注

    關注

    2

    文章

    808

    瀏覽量

    13249
收藏 人收藏

    評論

    相關推薦

    教你如何用OpenCV、Python和深度學習技術對圖像和實時視頻進行神經風格遷移

    雖然Gatys等人的方法能生成不錯的神經風格遷移結果,但是它的速度非常慢。2016年,Johnson等人在Gatys的基礎上提出的全新算法速度快了三倍,但同時也存在著缺點,即用戶不能隨機選擇想要應用的
    的頭像 發表于 08-31 09:47 ?7618次閱讀

    遷移學習

    經典機器學習算法介紹章節目標:機器學習是人工智能的重要技術之一,詳細了解機器學習的原理、機制和方法,為學習深度學習與遷移學習打下堅實的基礎。二、深度學習簡介與經典網絡結構介紹 神經網絡簡介神經網絡組件簡介
    發表于 04-21 15:15

    ?多模態風格遷移——生成更加美麗動人的風格圖像

    基于卷積的圖像風格遷移主要利用兩種方法來對特征進行表示,一種假設全局具有相同分布并用全局特征來表風格,另一種則基于圖像片提取風格。當風格圖像
    的頭像 發表于 05-01 14:11 ?4835次閱讀

    基于PyTorch的深度學習入門教程之使用PyTorch構建一個神經網絡

    PyTorch的自動梯度計算 Part3:使用PyTorch構建一個神經網絡 Part4:訓練一個神經網絡分類器 Part5:數據并行化 本文是關于Part3的內容。 Part3:使
    的頭像 發表于 02-15 09:40 ?2115次閱讀

    PyTorch教程8.1之深度卷積神經網絡(AlexNet)

    電子發燒友網站提供《PyTorch教程8.1之深度卷積神經網絡(AlexNet).pdf》資料免費下載
    發表于 06-05 10:09 ?0次下載
    <b class='flag-5'>PyTorch</b>教程8.1之深度卷積<b class='flag-5'>神經</b>網絡(AlexNet)

    PyTorch教程之循環神經網絡

    電子發燒友網站提供《PyTorch教程之循環神經網絡.pdf》資料免費下載
    發表于 06-05 09:52 ?0次下載
    <b class='flag-5'>PyTorch</b>教程之循環<b class='flag-5'>神經</b>網絡

    PyTorch教程9.6之遞歸神經網絡的簡潔實現

    電子發燒友網站提供《PyTorch教程9.6之遞歸神經網絡的簡潔實現.pdf》資料免費下載
    發表于 06-05 09:56 ?0次下載
    <b class='flag-5'>PyTorch</b>教程9.6之遞歸<b class='flag-5'>神經</b>網絡的簡潔實現

    PyTorch教程10.3之深度遞歸神經網絡

    電子發燒友網站提供《PyTorch教程10.3之深度遞歸神經網絡.pdf》資料免費下載
    發表于 06-05 15:12 ?0次下載
    <b class='flag-5'>PyTorch</b>教程10.3之深度遞歸<b class='flag-5'>神經</b>網絡

    PyTorch教程10.4之雙向遞歸神經網絡

    電子發燒友網站提供《PyTorch教程10.4之雙向遞歸神經網絡.pdf》資料免費下載
    發表于 06-05 15:13 ?0次下載
    <b class='flag-5'>PyTorch</b>教程10.4之雙向遞歸<b class='flag-5'>神經</b>網絡

    PyTorch教程14.12神經風格遷移

    電子發燒友網站提供《PyTorch教程14.12神經風格遷移.pdf》資料免費下載
    發表于 06-05 11:21 ?0次下載
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>14.12</b>之<b class='flag-5'>神經</b><b class='flag-5'>風格</b><b class='flag-5'>遷移</b>

    PyTorch教程16.2之情感分析:使用遞歸神經網絡

    電子發燒友網站提供《PyTorch教程16.2之情感分析:使用遞歸神經網絡.pdf》資料免費下載
    發表于 06-05 10:55 ?0次下載
    <b class='flag-5'>PyTorch</b>教程16.2之情感分析:使用遞歸<b class='flag-5'>神經</b>網絡

    基于OpenCV的DNN圖像風格遷移

    /deep-photo-styletransfer 項目,需要安裝 CUDA、pytorch、cudnn等等,配置能花一天的時間。 不過最近我發現一個非常好的開源應用項目,那就是基于OpenCV的DNN圖像風格遷移。你只需要安裝
    的頭像 發表于 10-30 10:03 ?621次閱讀

    使用PyTorch構建神經網絡

    PyTorch是一個流行的深度學習框架,它以其簡潔的API和強大的靈活性在學術界和工業界得到了廣泛應用。在本文中,我們將深入探討如何使用PyTorch構建神經網絡,包括從基礎概念到高級特性的全面解析。本文旨在為讀者提供一個完整的
    的頭像 發表于 07-02 11:31 ?730次閱讀

    PyTorch神經網絡模型構建過程

    PyTorch,作為一個廣泛使用的開源深度學習庫,提供了豐富的工具和模塊,幫助開發者構建、訓練和部署神經網絡模型。在神經網絡模型中,輸出層是尤為關鍵的部分,它負責將模型的預測結果以合適的形式輸出。以下將詳細解析
    的頭像 發表于 07-10 14:57 ?522次閱讀

    pytorch中有神經網絡模型嗎

    當然,PyTorch是一個廣泛使用的深度學習框架,它提供了許多預訓練的神經網絡模型。 PyTorch中的神經網絡模型 1. 引言 深度學習是一種基于人工
    的頭像 發表于 07-11 09:59 ?723次閱讀
    主站蜘蛛池模板: 精品极品三大极久久久久| 秋葵app秋葵官网18在线观看| 我与恶魔的h生活ova| 动漫美女被吸奶| 午夜在线观看免费观看 视频| 火影小南被爆羞羞网站| 最近免费视频中文2019完整版| 欧美嫩freexxxhddvd| 国产乱色伦影片在线观看| 一区二区三区四区国产| 欧美日韩亚洲一区二区三区在线观看| 国产国产乱老熟女视频网站97| 一二三四视频免费社区5| 欧美中文字幕一区二区三区| 国内精品久久久久影院老司| AV多人爱爱XXx| 亚洲国产精品无码中文在线| 免费视频精品38| 国产一级毛片在线| 99久久久精品免费观看国产| 亚洲AV香蕉一区区二区三区蜜桃| 美女漏bb| 狠狠鲁快播| 高h 大尺度纯肉 np快穿| 在线色av| 午夜一区二区三区| 欧美另类一区| 九九九九九热| 国产高潮久久精品AV无码| 2224x最新网站| 亚洲人人为我我为人人| 色综合伊人色综合网站下载| 蜜桃色欲AV久久无码精品| 国内精品乱码卡一卡2卡三卡新区| WWW国产无套内射久久| 诱咪视频免费| 亚洲国产五月综合网| 日本美国群交P片内射捆绑| 久久久亚洲国产精品主播| 国产精品一区二区三区免费| 爆乳啪啪无码成人二区亚洲欧美|