TensorFlow 2.0中文開源書項目:日贊700,登上GitHub熱榜
TensorFlow2.0 正式版已發布一段時間,但目前系統性的相關教程還不夠多。這個登上 GitHub 趨勢榜的項目今日已獲得 700 多贊,內容簡單易懂,適合初學者和遷移到 tf2.0 的開發者使用。
深度學習中繞不開的便是對算法框架的實際使用了。如果沒有嫻熟的工程實踐能力,很多優秀的算法設計就無法真正使用。TensorFlow2.0 正式版已發布了一段時間,然而過去使用 TensorFlow1.x 版本的開發者擔心兩個版本之間的差距過大以至于無法遷移已有的經驗,剛入門深度學習的人則因為 TensorFlow 那不友好的 API 和設計邏輯而望而卻步。
近日,GitHub 日趨勢榜上出現了這樣一個中文開源項目。它基于 TensorFlow2.0 框架,有配套學習的書、代碼和視頻課程,非常適合希望了解 tf2.0 的開發者學習參考。
目前該項目已獲得了 1000 多的點贊量,登上了 GitHub 熱榜,僅在今天項目就獲得 700 多贊。
項目地址:https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book
該項目作者為 Jackie Loong(龍良曲),曾為新加坡國立大學助理研究員,有 8 年的人工智能算法經驗,在 AAAI 會議上發表過多篇論文。從他的 GitHub 主頁上來看,這位開發者參與了很多深度學習相關的教程項目的工作。
本項目提供了電子版的《TensorFlow 2.0 深度學習開源書》,同時按照章節在每個文件夾中提供了源代碼。你只需要下載書籍,并根據內容和源代碼進行學習即可。
從章節劃分上來看,本書一共分為 15 個章節。首先本書會介紹人工智能的發展歷史,然后從第二章開始介紹回歸,隨后還有分類、TensorFlow 基礎和進階操作、神經網絡等知識。在第 10 章以后,書還會介紹包括 CNN、RNN/LSTM、自編碼器、GAN 及其變體等多個架構,內容很豐富。
以下為章節目錄:
代碼部分,目前作者已整理出了除第 4 章以外的大部分代碼,目前整理工作還在進行中。
以自編碼器的代碼為例,作者在 py 文件中詳細寫出了網絡的架構:
- class AE(keras.Model):
- def __init__(self):
- super(AE, self).__init__()
- # Encoders
- self.encoder = Sequential([
- layers.Dense(256, activation=tf.nn.relu),
- layers.Dense(128, activation=tf.nn.relu),
- layers.Dense(h_dim)
- ])
- # Decoders
- self.decoder = Sequential([
- layers.Dense(128, activation=tf.nn.relu),
- layers.Dense(256, activation=tf.nn.relu),
- layers.Dense(784)
- ])
- def call(self, inputs, training=None):
- # [b, 784] => [b, 10]
- h = self.encoder(inputs)
- # [b, 10] => [b, 784]
- x_hat = self.decoder(h)
- return x_hat
同時,每個 py 文件不僅僅只有示例代碼。從代碼來看,這些 py 文件實際上都是可以直接運行的,以下便是自編碼器文件中執行模型訓練的代碼:
- model = AE()
- model.build(input_shape=(None, 784))
- model.summary()
- optimizer = tf.optimizers.Adam(lr=lr)
- for epoch in range(100):
- for step, x in enumerate(train_db):
- #[b, 28, 28] => [b, 784]
- x = tf.reshape(x, [-1, 784])
- with tf.GradientTape() as tape:
- x_rec_logits = model(x)
- rec_loss = tf.losses.binary_crossentropy(x, x_rec_logits, from_logits=True)
- rec_loss = tf.reduce_mean(rec_loss)
- grads = tape.gradient(rec_loss, model.trainable_variables)
- optimizer.apply_gradients(zip(grads, model.trainable_variables))
- if step % 100 ==0:
- print(epoch, step, float(rec_loss))
這樣一來,即使沒有編程經驗的初學者也可以先跑通代碼,理解原理后再嘗試自行編程。
除了這些資源外,作者還貼出了一個 tf2.0 實戰案例的項目庫,開發者可配合使用。
項目地址:https://github.com/dragen1860/TensorFlow-2.x-Tutorials