日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

keras 自定义层input_从4个方面介绍Keras和Pytorch,并给你选择其中一个学习库的理由...

發布時間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 keras 自定义层input_从4个方面介绍Keras和Pytorch,并给你选择其中一个学习库的理由... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
全文共3376字,預計學習時長7分鐘

對許多科學家、工程師和開發人員而言,TensorFlow是他們的第一個深度學習框架。

TensorFlow 1.0于2017年2月發布;但客觀來說,它對用戶不是非常友好。

過去幾年里,由于Keras和PyTorch比TensorFlow更容易使用,這兩個主要的深度學習庫已得到較廣的普及。

本文將從四個方面來介紹Keras和Pytorch,以及選擇其中一個學習庫的理由。

Keras

Keras自身并不是框架,它其實是一個位于其他高級學習框架之上的高級API。目前,它支持TensorFlow, Theano和CNTK。

Keras的吸引力在于使用簡單。它是目前為止啟動和運行最快且最簡單的框架。神經網絡的定義是直觀的,使用功能API則允許人們將函數定義為層次。

Pytorch

Pytorch是由Facebook AI 研究組開發的深度學習框架(如Tensorflow)。像Keras一樣,它也提煉了深度網絡編程的大多混亂部分。

就編碼風格的高級和低級而言,Pytorch介于Keras和TensorFlow之間。使用時,你有比Keras更多的靈活性和控制力,同時還無需冗長的聲明式編程。

應該使用哪一個編程框架,是深度學習練習者一直在爭論的問題。一般來說,這取決于個人偏好。但在做選擇時,需要記住Keras和Pytorch的這幾個方面的知識。

用于定義模型的類與函數

為了定義深度學習模型,Keras設置了功能API。在功能API的范疇里,神經網絡被定義為一組順序函數,需要接連使用。比如說,函數定義層1的輸出是函數定義層2的輸入。

img_input = layers.Input(shape=input_shape)x = layers.Conv2D(64, (3, 3), activation='relu')(img_input)x = layers.Conv2D(64, (3, 3), activation='relu')(x)x = layers.MaxPooling2D((2, 2), strides=(2, 2))(x)

而Pytorch將網絡設置為一個類,該類拓展了Torch庫中的torch.nn模塊。與Keras類似,Pytorch使用的層為構建塊,但由于它們在Pytorch的類中,因此它們屬于‘__init__()’類下的一種字符,并由‘forward()’類執行。

class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 64, 3) self.conv2 = nn.Conv2d(64, 64, 3) self.pool = nn.MaxPool2d(2, 2) def forward(self, x): x = F.relu(self.conv1(x)) x = self.pool(F.relu(self.conv2(x))) return xmodel = Net()

因為Pytorch允許訪問Python的所有的類功能而不是簡單的函數調用,所以定義網絡可以更清晰,包容量更多。這真沒有什么不好的,除非你認為,盡可能快地編寫網絡代碼對你來說是最重要的,那么Keras使用起來會更方便。

張量和計算圖對比標準數列

對于隨意的程序員來說,Keras API隱藏了許多混亂的細節。定義網絡層十分直觀,通常默認設置就足夠入門。

只有你處理到前沿的、或是奇特的模型時,才需要開始著手處理低級、細節的TensorFlow。

然而麻煩的是,當你處理到更低級別的TensorFlow時,隨之而來的是所有具有挑戰性的部分。必須保證排好所有的矩陣乘法。你甚至不用嘗試打印任何一個圖層輸出,因為你將在終端得到一個漂亮的Tensor定義。

Pytorch對這些方面的要求往往更加寬松。你必須知道每個層輸入和輸出的大小,但這是一個可以快速掌握的簡單技能。不必構建一個無法在調試中直觀看到的抽象計算圖。

Pytorch的另一個優點是可以在Torch Tensors和Numpy陣列之間來回切換。如果你要做一些自定義的東西,那么在TF張量和Numpy陣列之間來回切換可能會很麻煩。此時,開發人員需要對TensorFlow會話有充分的了解。

Pytorch的交互操作實際上更簡單。你只要知道兩個操作:一個是將Torch Tensor(一個變量對象)切換為Numpy,另一個就是切換到相反方向。

當然,如果你不需要執行任何花哨的東西,那么Keras就已經足夠好了,因為不會遇到任何TensorFlow的阻礙。但如果你需要執行復雜的編程,那么使用Pytorch可能會更順暢。

訓練模型

在Keras中訓練模型非常簡單!僅需一個的‘.fit()’,你就可以甩開步子,享受這場“編程之行”。

history = model.fit_generator( generator=train_generator, epochs=10, validation_data=validation_generator)

在Pytorch中訓練模型包括幾個步驟:

1. 每批訓練開始時初始化梯度

2. 運行前進模式

3. 運行后退模式

4. 計算損失并更新權重

for epoch in range(2): # loop over the dataset multiple times running_loss = 0.0 for i, data in enumerate(trainloader, 0): # Get the inputs; data is a list of [inputs, labels] inputs, labels = data # (1) Initialise gradients optimizer.zero_grad() # (2) Forward pass outputs = net(inputs) loss = criterion(outputs, labels) # (3) Backward loss.backward() # (4) Compute the loss and update the weights optimizer.step()

這些都不過是運行訓練的常見步驟!

如此一來,你總能意識到發生了什么。同時,由于這些模型訓練步驟在訓練不同模型時基本保持不變,因此它們顯得十分不必要。

控制CPU與GPU模式

如果安裝了tensorflow-gpu,你可以選擇用Keras的默認設置啟動并使用GPU。然后,如果你想把某些操作移動到CPU里,可以執行以下單行操作:

with tf.device('/cpu:0'): y = apply_non_max_suppression(x)

至于Pytorch,你必須為每個torch張量和Numpy變量明確指定運行GPU。如果在CPU和GPU之間來回切換來進行不同的操作,這會使代碼變得混亂,且有可能容易出錯。

例如,要把以前的模型轉移到GPU上運行,我們必須執行以下操作:

# Get the GPU devicedevice = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # Transfer the network to GPUnet.to(device) # Transfer the inputs and labels to GPUinputs, labels = data[0].to(device), data[1].to(device)

Keras贏在它的簡潔和良好的默認設置。

選擇框架的一般建議

通常我們建議從Keras入門。

Keras無疑是最容易使用,理解且快速啟動和運行的框架。你不用擔心它的GPU設置,不需要擺弄抽象代碼,總之,你不必做任何復雜的事情。你甚至可以在不觸及任何一行TensorFlow 的情況下,執行自定義圖層和損失函數的操作。

如果你開始深入了解深層網絡的更精細的方面,或者正在執行一些非標準化的東西,那么Pytorch就是首選深度學習庫。用Keras的話,就會多一些額外的工作,但不會太多,只不過這會使你的工作效率降低。可是,你依舊可以快速執行,訓練和檢測網絡,而且還能輕松調試!

留言 點贊 關注

我們一起分享AI學習與發展的干貨

歡迎關注全平臺AI垂類自媒體 “讀芯術”

總結

以上是生活随笔為你收集整理的keras 自定义层input_从4个方面介绍Keras和Pytorch,并给你选择其中一个学习库的理由...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。