Mojo編程語言:Python易用性與C性能的完美結合

億牛云代理

Mojo是一門新的編程語言治泥,它結合了Python的易用性和C的性能,旨在成為AI研究和生產的理想選擇。Mojo的優(yōu)點有:

它可以編寫比C更快的可移植代碼蘸鲸,據稱比Python快35000倍核芽。

它可以與Python生態(tài)系統(tǒng)無縫互操作囚戚,支持Python的核心功能,如異步/等待轧简、錯誤處理和可變參數驰坊。

它可以利用系統(tǒng)編程和元編程,提供更高的抽象和表達能力哮独。

Mojo是Python的超集拳芙,也就是說,任何有效的Python代碼也是有效的Mojo代碼皮璧。Mojo還添加了一些新的語法和特性舟扎,如類型推斷、編譯時計算悴务、內聯函數等睹限,以提高性能和靈活性。

(1)用Mojo實現一個簡單的神經網絡,用來識別手寫數字:

# 導入必要的模塊

import numpy as np

import matplotlib.pyplot as plt

import tensorflow as tf

# 定義一個內聯函數羡疗,用來初始化權重矩陣

inline def init_weights(shape: list) -> np.ndarray:

? return np.random.normal(size=shape) / np.sqrt(sum(shape))

# 定義一個內聯函數删窒,用來計算交叉熵損失

inline def cross_entropy(y_true: np.ndarray, y_pred: np.ndarray) -> float:

? return -np.mean(y_true * np.log(y_pred))

# 定義一個內聯函數,用來計算準確率

inline def accuracy(y_true: np.ndarray, y_pred: np.ndarray) -> float:

? return np.mean(np.argmax(y_true, axis=1) == np.argmax(y_pred, axis=1))

# 加載MNIST數據集

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()

# 將圖像數據轉換為浮點型并歸一化

x_train = x_train.astype(np.float32) / 255.0

x_test = x_test.astype(np.float32) / 255.0

# 將標簽數據轉換為one-hot編碼

y_train = tf.keras.utils.to_categorical(y_train, 10)

y_test = tf.keras.utils.to_categorical(y_test, 10)

# 定義超參數

learning_rate = 0.01 # 學習率

epochs = 10 # 訓練輪數

batch_size = 128 # 批次大小

# 定義網絡結構

n_input = 784 # 輸入層神經元個數(28*28)

n_hidden = 256 # 隱藏層神經元個數

n_output = 10 # 輸出層神經元個數(10個類別)

# 初始化權重和偏置

W1 = init_weights([n_input, n_hidden]) # 輸入層到隱藏層的權重矩陣

b1 = np.zeros(n_hidden) # 隱藏層的偏置向量

W2 = init_weights([n_hidden, n_output]) # 隱藏層到輸出層的權重矩陣

b2 = np.zeros(n_output) # 輸出層的偏置向量

# 訓練網絡

for epoch in range(epochs):

? # 打亂訓練數據的順序

? indices = np.arange(len(x_train))

? np.random.shuffle(indices)

? x_train = x_train[indices]

? y_train = y_train[indices]

? # 按批次進行訓練

? for i in range(0, len(x_train), batch_size):

? ? # 獲取當前批次的數據

? ? x_batch = x_train[i:i+batch_size].reshape(-1, n_input)

? ? y_batch = y_train[i:i+batch_size]

? ? # 前向傳播顺囊,計算輸出層的激活值

? ? z1 = x_batch @ W1 + b1 # 隱藏層的線性組合

? ? a1 = np.tanh(z1) # 隱藏層的激活值肌索,使用雙曲正切函數作為激活函數

? ? z2 = a1 @ W2 + b2 # 輸出層的線性組合

? ? a2 = np.exp(z2) / np.sum(np.exp(z2), axis=1, keepdims=True) # 輸出層的激活值,使用softmax函數作為激活函數

? ? # 反向傳播特碳,計算梯度并更新權重和偏置

? ? delta2 = a2 - y_batch # 輸出層的誤差項

? ? delta1 = (1 - a1**2) * (delta2 @ W2.T) # 隱藏層的誤差項诚亚,使用雙曲正切函數的導數作為激活函數的導數

? ? W2 -= learning_rate * (a1.T @ delta2) / batch_size # 更新隱藏層到輸出層的權重矩陣

? ? b2 -= learning_rate * np.mean(delta2, axis=0) # 更新輸出層的偏置向量

? ? W1 -= learning_rate * (x_batch.T @ delta1) / batch_size # 更新輸入層到隱藏層的權重矩陣

? ? b1 -= learning_rate * np.mean(delta1, axis=0) # 更新隱藏層的偏置向量


? # 計算訓練集和測試集上的損失和準確率,并打印結果

? train_loss = cross_entropy(y_train, a2)

? train_acc = accuracy(y_train, a2)

? z1_test = x_test.reshape(-1, n_input) @ W1 + b1

? a1_test = np.tanh(z1_test)

? z2_test = a1_test @ W2 + b2

? a2_test = np.exp(z2_test) / np.sum(np.exp(z2_test), axis=1, keepdims=True)

? test_loss = cross_entropy(y_test, a2_test)

? test_acc = accuracy(y_test, a2_test)

? print(f"Epoch {epoch+1}: Train loss: {train_loss:.4f}, Train acc: {train_acc:.4f}, Test loss: {test_loss:.4f}, Test acc: {test_acc:.4f}")

(2)用Mojo實現豆瓣電影的采集午乓,獲取當前熱映的電影名稱和評分:

# 導入必要的模塊

import requests

from bs4 import BeautifulSoup

# 定義一個內聯函數站宗,用來生成代理認證的頭部

inline def proxy_auth_header(username: str, password: str) -> str:

? # 將用戶名和密碼進行base64編碼

? auth = base64.b64encode(f"{username}:{password}".encode()).decode()

? # 返回代理認證的頭部

? return f"Basic {auth}"

# 定義目標網站的URL

target_url = "https://movie.douban.com"

# 億牛云(動態(tài)轉發(fā)隧道代理)爬蟲加強版代理IP 服務器的URL,用戶名和密碼

proxy_url = "http://www.16yun.cn:8080"

proxy_username = "16YUN"

proxy_password = "16IP"

# 創(chuàng)建一個會話對象

s = requests.Session()

# 設置代理服務器和代理認證頭部

s.proxies = {"http": proxy_url, "https": proxy_url}

s.headers["Proxy-Authorization"] = proxy_auth_header(proxy_username, proxy_password)

# 發(fā)送請求并獲取響應

response = s.get(target_url)

# 判斷響應狀態(tài)碼是否為200

if response.status_code == 200:

? # 解析響應內容并獲取正在熱映的電影信息

? soup = BeautifulSoup(response.text, "html.parser")

? movies = soup.find_all("div", class_="slide-item")


? # 創(chuàng)建一個空列表益愈,用來存儲電影名稱和評分

? movie_list = []

? # 遍歷每個電影信息梢灭,提取名稱和評分,并添加到列表中

? for movie in movies:

? ? title = movie.find("span", class_="title").text # 電影名稱

? ? rating = movie.find("span", class_="rating_num").text # 電影評分

? ? movie_list.append((title, rating)) # 將名稱和評分作為元組添加到列表中


? # 打印電影列表

? print("正在熱映的電影有:")

? for title, rating in movie_list:

? ? print(f"{title}蒸其,評分為{rating}敏释。")

else:

? # 打印錯誤信息

? print(f"Something went wrong. The status code is: {response.status_code}")

Mojo是一門新興的編程語言,但已經有一些用戶可以通過Mojo Playground在線體驗Mojo的編程摸袁。Mojo的開發(fā)團隊計劃逐步開源Mojo钥顽,并與社區(qū)進行交流和反饋。Mojo的發(fā)展趨勢是利用MLIR(多層次中間表示)作為其核心基礎靠汁,實現跨平臺蜂大、跨語言、跨硬件的優(yōu)化和部署蝶怔。Mojo還希望成為一個統(tǒng)一的AI語言奶浦,支持各種AI框架和庫,如TensorFlow踢星、PyTorch等澳叉。

總之,Mojo是一門具有前瞻性和創(chuàng)新性的編程語言斩狱,它有可能成為未來幾十年內最重要的編程進展之一耳高。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市所踊,隨后出現的幾起案子泌枪,更是在濱河造成了極大的恐慌,老刑警劉巖秕岛,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碌燕,死亡現場離奇詭異误证,居然都是意外死亡,警方通過查閱死者的電腦和手機修壕,發(fā)現死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門愈捅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人慈鸠,你說我怎么就攤上這事蓝谨。” “怎么了青团?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵譬巫,是天一觀的道長。 經常有香客問我督笆,道長芦昔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任娃肿,我火速辦了婚禮咕缎,結果婚禮上,老公的妹妹穿的比我還像新娘料扰。我一直安慰自己凭豪,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布记罚。 她就那樣靜靜地躺著墅诡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桐智。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天烟馅,我揣著相機與錄音说庭,去河邊找鬼。 笑死郑趁,一個胖子當著我的面吹牛刊驴,可吹牛的內容都是我干的。 我是一名探鬼主播寡润,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼捆憎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了梭纹?” 一聲冷哼從身側響起躲惰,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎变抽,沒想到半個月后础拨,有當地人在樹林里發(fā)現了一具尸體氮块,經...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年诡宗,在試婚紗的時候發(fā)現自己被綠了滔蝉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡塔沃,死狀恐怖蝠引,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情蛀柴,我是刑警寧澤立肘,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站名扛,受9級特大地震影響谅年,放射性物質發(fā)生泄漏。R本人自食惡果不足惜肮韧,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一融蹂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弄企,春花似錦超燃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至约素,卻和暖如春届良,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背圣猎。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工士葫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人送悔。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓慢显,卻偏偏與公主長得像,于是被迫代替她去往敵國和親欠啤。 傳聞我的和親對象是個殘疾皇子荚藻,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內容