這篇文章將為大家詳細(xì)講解有關(guān)Swift有什么用,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)公司專注于義安網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供義安營銷型網(wǎng)站建設(shè),義安網(wǎng)站制作、義安網(wǎng)頁設(shè)計、義安網(wǎng)站官網(wǎng)定制、小程序設(shè)計服務(wù),打造義安網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供義安網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
1.為什么選擇Swift?
PyTorch是為了克服Tensorflow中的限制。但現(xiàn)在我們正接近Python的極限,而Swift有可能填補(bǔ)這一空白。"——Jeremy Howard
最近,Swift作為一種數(shù)據(jù)科學(xué)語言引起了很多人的興奮和關(guān)注。每個人都在談?wù)撍R韵率悄銘?yīng)該學(xué)習(xí)Swift的幾個理由:
Swift快,很接近C的速度了
同時,它有一個非常簡單和可讀的語法,非常類似Python:
與Python相比,Swift是一種更高效、更穩(wěn)定、更安全的編程語言
這也是一種很好的移動語言。事實(shí)上,它是為iPhone開發(fā)iOS應(yīng)用程序的官方語言
它對自動微分有強(qiáng)大的集成支持,這使它成為為數(shù)不多的用于數(shù)值計算的高級語言之一
它背后有谷歌、Apple、FastAI等的支持!
以下是Jeremy Howard對Swift的評價視頻:https://youtu.be/drSpCwDFwnM
2.數(shù)據(jù)分析的Swift基礎(chǔ)
在我們開始使用Swift執(zhí)行數(shù)據(jù)科學(xué)的細(xì)節(jié)之前,讓我們簡要介紹一下Swift編程語言的基礎(chǔ)知識。
2.1 Swift的生態(tài)系統(tǒng)
當(dāng)前數(shù)據(jù)科學(xué)的Swift主要由兩個生態(tài)系統(tǒng)組成:
開源生態(tài)系統(tǒng)
蘋果的生態(tài)系統(tǒng)
開源生態(tài)系統(tǒng)是我們可以下載并在任何操作系統(tǒng)或機(jī)器上運(yùn)行Swift的地方。我們可以使用非??岬腟wift庫來構(gòu)建機(jī)器學(xué)習(xí)應(yīng)用程序,比如用于TensorFlow的Swift、SwiftAI和SwiftPlot。
Swift還允許我們無縫地從Python中導(dǎo)入成熟的數(shù)據(jù)科學(xué)庫,如NumPy、panda、matplotlib和scikit-learn。
另一方面,蘋果的生態(tài)系統(tǒng)本身就令人印象深刻。有一些有用的庫,比如CoreML,可以讓我們用Python來訓(xùn)練大型模型,并直接將它們導(dǎo)入到Swift中進(jìn)行推理。此外,它還提供了大量的預(yù)先訓(xùn)練過的先進(jìn)模型,我們可以直接使用它們來構(gòu)建iOS/macOS應(yīng)用程序。
還有其他有趣的庫,比如swift ,coreml,transformer,可以讓我們在iPhone上運(yùn)行最先進(jìn)的文本生成模型,比如GPT-2、BERT等。
當(dāng)你需要為Apple設(shè)備構(gòu)建基于機(jī)器學(xué)習(xí)的應(yīng)用程序時,還有許多其他的庫可以提供良好的功能。
這兩個生態(tài)系統(tǒng)之間存在多種差異。但最重要的是,為了使用蘋果的生態(tài)系統(tǒng),你需要有一臺蘋果的機(jī)器,你只能為蘋果的設(shè)備開發(fā),如iOS, macOS等。
既然你已經(jīng)有了Swift作為數(shù)據(jù)科學(xué)語言的概述,讓我們進(jìn)入代碼吧!
2.2 為Swift設(shè)置環(huán)境
Swift可用于谷歌Colab與GPU和TPU版本。我們將使用它,以便你可以快速跟上它的速度,而不必在安裝過程中花費(fèi)太多時間。
你可以按照下面的步驟打開一個Colab筆記本,這是快速激活的:
打開一個空白的Swift筆記本(https://colab.research.google.com/github/tensorflow/swift/blob/master/notebooks/blank_swift.ipynb)
點(diǎn)擊"File",然后選擇"Save a copy in Drive"-這將保存一個新的Swift筆記本在你自己的谷歌驅(qū)動器上!
已經(jīng)準(zhǔn)備好開始寫Swift代碼了,一下是第一行:
如果你想在你自己的系統(tǒng)上使用Swift,那么這里有一些你可以打開的鏈接:
如果你想在本地系統(tǒng)上安裝Swift,你可以按照安裝說明操作:https://swift.org/getting-started/#using-the-repl
在Ubuntu上安裝Jupyter筆記本,請參考Jeremy Howard安裝Swift的說明:https://forums.fast.ai/t/jeremys-harebrained-install-guide/43814
在Ubuntu上,你也可以用Docker安裝Swift:https://github.com/apple/swift-docker
現(xiàn)在,讓我們快速介紹一下一些基本的Swift函數(shù),然后再進(jìn)入使用它的數(shù)據(jù)科學(xué)功能。
2.3 打印功能
我相信你用過這個。它的工作方式與Python中非常相似。只需調(diào)用print(),在括號內(nèi)輸入你想打印的內(nèi)容:
2.4 Swift的變量
Swift提供了兩個有用的選項(xiàng)來創(chuàng)建變量:let和var. let用來創(chuàng)建一個"常量",這個常量的值在程序的任何地方都不能改變。var與我們在Python中看到的變量非常相似——你可以在程序的任何時候更改存儲在其中的值。
讓我們看一個例子來看看區(qū)別。創(chuàng)建兩個變量a和b:
現(xiàn)在,嘗試改變a和b的值:
你會注意到,b能夠不報錯的更新其值,而a則給出一個錯誤:
這種創(chuàng)建常量與變量的能力非常有用,可以幫助我們防止代碼中出現(xiàn)看不見的bug。你將在本文中進(jìn)一步看到,我們將使用let來創(chuàng)建存儲重要信息并且不需要變更值的常量,
這里有一個技巧:使用var來創(chuàng)建你想使用一些中間計算的結(jié)果,因?yàn)檫@些中間計算結(jié)果需要改變。類似地,使用let來存儲訓(xùn)練數(shù)據(jù)或者結(jié)果,這些數(shù)據(jù)基本上就是你不想更改或弄亂的值。
此外,Swift還有一個很酷的功能,你甚至可以使用表情符號作為變量名!
這是因?yàn)镾wift非常支持Unicode,所以我們可以用希臘字母來創(chuàng)建變量:
2.5 Swift的數(shù)據(jù)類型
Swift支持所有常見的數(shù)據(jù)類型,如整數(shù)、字符串、浮點(diǎn)數(shù)和雙精度。我們可以賦值給任何變量,其類型會被Swift自動檢測到:
你還可以在創(chuàng)建變量時顯式地編寫數(shù)據(jù)類型。這有助于防止程序中的錯誤,因?yàn)槿绻愋筒黄ヅ?。Swift將拋出一個錯誤:
可以做個小測驗(yàn)。創(chuàng)建一個顯式類型為"Float"的值為4的常量,結(jié)果是會報錯的。
有一種簡單的方法可以將變量的值包含在字符串中,方法是將變量放在括號中,并在括號前寫入反斜杠()。例如:
可以對占用多行的字符串使用三個雙引號(""")。
2.6 列表和字典
Swift支持列表和字典數(shù)據(jù)結(jié)構(gòu),就像Python一樣(這又是一個比較!)這里與Python不同,我們不需要像字典的"{}"和列表的"[]"這樣的單獨(dú)語法。
讓我們用Swift創(chuàng)建一個列表和字典:
我們可以通過在"[]"括號內(nèi)寫入索引或者鍵來訪問列表或字典的元素(類似于Python):
上面的代碼將把"Jayne"和"Public Relations"的鍵值對添加到字典中。如果你打印以上的字典以下就是輸出:
2.7 使用循環(huán)
循環(huán)是任何編程語言最重要的特性之一,Swift不會讓你失望。它不僅支持所有傳統(tǒng)的循環(huán)機(jī)制(for、while等),而且還實(shí)現(xiàn)了它自己的一些變體。
for..in 循環(huán)
非常類似于Python,你可以使用在Swift中的list或者range使用for循環(huán):
第一個例子中的三個點(diǎn)表示Swift中的"range"。如果我們想做a到b范圍內(nèi)的事情,我們會使用a…b的語法。
類似地,如果我們想不要最后一個數(shù)字,我們可以把這三個點(diǎn)改成"..<"像"a.."。
這里需要注意的另一點(diǎn)是,與Python不同,Swift不使用縮進(jìn)的概念,而是使用花括號"{}"來表示代碼層次結(jié)構(gòu)。
你可以在Swift中以類似的方式使用while和其他類型的循環(huán)。你可以這里了解更多關(guān)于循環(huán)的信息:https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html。
2.8 條件(if-else)
Swift支持條件語句,如if, if..else, if..else..if, 嵌套if甚至switch語句(Python不支持)。if語句的語法非常簡單:
boolean_expression可以是任何比較,只有在比較結(jié)果或表達(dá)式的計算結(jié)果為true時,才會執(zhí)行if塊中編寫的語句。你可以在這里閱讀其他條件語句:https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html。
2.9 函數(shù)
Swift函數(shù)在語法上與Python中的函數(shù)非常相似。這里的主要區(qū)別是我們使用了func關(guān)鍵字而不是def,并且我們明確地提到了參數(shù)的數(shù)據(jù)類型和函數(shù)的返回類型。
一個基本的函數(shù)如下:
和條件語句一樣,我們使用花括號"{}"來表示屬于這個函數(shù)的代碼塊。
2.10 用代碼編寫注釋
編寫注釋是優(yōu)秀代碼最重要的方面之一。這適用于任何行業(yè)。這是你應(yīng)該學(xué)習(xí)的最重要的編程技巧!
在你的代碼里包含注釋文本,作為對自己的注釋或提醒。注釋在編譯時會被Swift忽略。
單行注釋以兩個斜杠(//)開頭:
多行注釋以一個前斜杠和一個星號(/*)開始,以一個星號和一個前斜杠(*/)結(jié)束:
現(xiàn)在你已經(jīng)熟悉了Swift的基礎(chǔ)知識,讓我們來學(xué)習(xí)一個有趣的功能——在Swift中使用Python庫!
3.在Swift中使用Python庫
Swift支持與Python的互操作性。這意味著你可以從Swift導(dǎo)入有用的Python庫,調(diào)用它們的函數(shù),并在Swift和Python之間無縫地切換。
這給了Swift的數(shù)據(jù)科學(xué)生態(tài)系統(tǒng)不可思議的力量。這個生態(tài)系統(tǒng)還很年輕,還在發(fā)展中,你已經(jīng)可以使用成熟的庫,如Numpy、panda和Python的Matplotlib來填補(bǔ)現(xiàn)有Swift產(chǎn)品的空白。
為了在Swift中使用Python的模塊,你可以直接導(dǎo)入Python并加載任何你想要使用的庫!
這與你在Python中使用NumPy的方式非常相似,不是嗎?你可以對其他包做同樣的事情,如matplotlib:
你已經(jīng)學(xué)了不少關(guān)于Swift的東西?,F(xiàn)在是時候構(gòu)建你的第一個模型了!
4.使用TensorFlow建立Swift的基本模型
Swift4Tensorflow是Swift開源生態(tài)系統(tǒng)中最成熟的庫之一。我們可以使用一個非常簡單的keras類語法很容易的建立機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型。
它變得更加有趣!Swift4Tensorflow不僅僅是對TensorFlow的快速包裝,它還被開發(fā)為該語言本身的一個特性。人們普遍認(rèn)為,在不久的將來,它將成為該語言的核心部分。
這意味著來自蘋果公司的Swift團(tuán)隊和谷歌的Tensorflow團(tuán)隊的工程師將確保你能夠在Swift中進(jìn)行高性能的機(jī)器學(xué)習(xí)。
該庫還向Swift添加了許多有用的特性,比如對自動微分的原生支持(這讓我想起了PyTorch中的Autograd),從而使它與數(shù)值計算更加兼容。
4.1 關(guān)于數(shù)據(jù)集
讓我們來理解一下我們將在本節(jié)中使用的問題陳述。如果你以前接觸過深度學(xué)習(xí)領(lǐng)域,你可能對它很熟悉。
我們將構(gòu)建一個卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型,使用MNIST數(shù)據(jù)集將圖像分類為數(shù)字。該數(shù)據(jù)集包含6萬張訓(xùn)練圖像和1萬張手寫數(shù)字測試圖像,可用于訓(xùn)練圖像分類模型:
這個數(shù)據(jù)集是處理計算機(jī)視覺問題的一個相當(dāng)常見的數(shù)據(jù)集,所以我不打算詳細(xì)描述它。
4.2 開始項(xiàng)目
在開始構(gòu)建模型之前,我們需要下載數(shù)據(jù)集并對其進(jìn)行預(yù)處理。為了方便你,我已經(jīng)創(chuàng)建了一個GitHub存儲庫,里面預(yù)處理了代碼和數(shù)據(jù)
下載安裝代碼,下載數(shù)據(jù)集,導(dǎo)入必要的庫:
你的數(shù)據(jù)集現(xiàn)在將在Colab上下載。讓我們加載數(shù)據(jù)集:
4.3 加載數(shù)據(jù)集
4.4 探索MNIST
我們將從數(shù)據(jù)集繪制一些圖像,以了解我們的工作是什么:
這是我們的圖像是這樣的:
看起來很直觀,對吧?第一個數(shù)字是手寫的0,第二個數(shù)字是4。
4.5 定義模型的結(jié)構(gòu)
現(xiàn)在讓我們定義模型的體系結(jié)構(gòu)。我使用的是LeNet-5架構(gòu),這是一個非?;A(chǔ)的CNN模型,使用了2個卷積層,平均池化層和3個全連接層。
最后一個全連接層的形狀是10,因?yàn)槲覀冇?0個目標(biāo)類,每個數(shù)字一個從0到9:
你可能已經(jīng)注意到,這些代碼看起來非常類似于Keras、PyTorch或TensorFlow等Python框架中。
編寫代碼的簡單性是Swift最大的賣點(diǎn)之一。
Swift4Tensorflow你可以在這里閱讀更多關(guān)于它的信息:https://www.tensorflow.org/swift/api_docs/Structs
4.6 選擇梯度下降作為優(yōu)化器
類似地,我們需要一個優(yōu)化器函數(shù)來訓(xùn)練我們的模型。我們將使用Swift4Tensorflow中提供的隨機(jī)梯度下降(SGD):
Swift4Tensorflow支持許多額外的優(yōu)化器。你可以根據(jù)你的項(xiàng)目選擇:
AMSGrad
AdaDelta
AdaGrad
AdaMax
Adam
Parameter
RMSProp
SGD
4.7 模型訓(xùn)練
現(xiàn)在一切都設(shè)置好了,讓我們來訓(xùn)練模型!
上面的代碼運(yùn)行一個訓(xùn)練循環(huán),該循環(huán)將數(shù)據(jù)集示例提供給模型,以幫助它做出更好的預(yù)測。以下是我們的訓(xùn)練步驟:
鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)
我們迭代每個epoch。epoch是遍歷整個數(shù)據(jù)集的次數(shù)。
在epoch中,我們遍歷訓(xùn)練數(shù)據(jù)集中的每個樣本,獲取其特征(x)和標(biāo)簽(y),這對于下一步非常重要。
利用例子的特征,我們做了一個預(yù)測,并與真實(shí)標(biāo)簽進(jìn)行了比較。這是用來計算模型的損失和梯度。
這時使用梯度下降法來更新模型中的變量。
記錄一些訓(xùn)練數(shù)據(jù),以便以后能看到它們。
為每個epoch重復(fù)步驟1到5。
epochCount變量是遍歷數(shù)據(jù)集集合的次數(shù)。
你花了多少epoch才在測試集上達(dá)到90%以上的準(zhǔn)確率?
我在12個epoch內(nèi),在訓(xùn)練和測試集的準(zhǔn)確率都達(dá)到了97%以上。
4.8 可視化訓(xùn)練和測試數(shù)據(jù)
雖然打印出模型的訓(xùn)練進(jìn)度很有幫助,但是看到可視化圖像通常更有幫助。
讓我們將在模型訓(xùn)練期間捕獲的訓(xùn)練和測試統(tǒng)計數(shù)據(jù)可視化。
這是訓(xùn)練和測試精度在訓(xùn)練過程中的演變過程:
5.數(shù)據(jù)科學(xué)Swift的未來
行業(yè)專家們對Swift的反應(yīng)是令人難以置信的,感覺它不僅有潛力成為數(shù)據(jù)科學(xué)的主流語言,而且它也是用于在現(xiàn)實(shí)世界構(gòu)建基于機(jī)器學(xué)習(xí)的應(yīng)用程序。
目前,它還處于起步階段,圍繞數(shù)據(jù)科學(xué)和數(shù)值計算的庫仍在發(fā)展中。然而,它背后有強(qiáng)大的行業(yè)支持,我期待著未來它將擁有一個豐富的工具和庫生態(tài)系統(tǒng)(甚至可能比現(xiàn)在的Python更好)。
關(guān)于“Swift有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。