簡單易用 TensorFlow 代碼集,GAN通用框架、函數

2021-03-02 相約機器人


來源:GitHub    作者:Junho Kim

今天為大家推薦一個實用的GitHub項目:TensorFlow-Cookbook。 這是一個易用的TensorFlow代碼集,包含了對GAN有用的一些通用架構和函數。

今天為大家推薦一個實用的GitHub項目:TensorFlow-Cookbook

這是一個易用的TensorFlow代碼集,作者是來自韓國的AI研究科學家Junho Kim,內容涵蓋了譜歸一化卷積、部分卷積、pixel shuffle、幾種歸一化函數、 tf-datasetAPI,等等。

作者表示,這個repo包含了對GAN有用的一些通用架構和函數。

項目正在進行中,作者將持續為其他領域添加有用的代碼,目前正在添加的是 tf-Eager mode的代碼。歡迎提交pull requests和issues。

Github地址 : 

https://github.com/taki0112/Tensorflow-Cookbook

Import

ops.py

operations

from ops import *

utils.py

image processing

from utils import *

Network template

def network(x, is_training=True, reuse=False, scope="network"):    with tf.variable_scope(scope, reuse=reuse):        x = conv(...)                ...                return logit

使用DatasetAPI向網絡插入數據

Image_Data_Class = ImageData(img_size, img_ch, augment_flag)trainA = trainA.map(Image_Data_Class.image_processing, num_parallel_calls=16)trainA = trainA.shuffle(buffer_size=10000).prefetch(buffer_size=batch_size).batch(batch_size).repeat()trainA_iterator = trainA.make_one_shot_iterator()data_A = trainA_iterator.get_next()logit = network(data_A)

Option

padding='SAME'

pad_type

sn

Ra

loss_func

gan

lsgan

hinge

wgan

wgan-gp

dragan

注意權重(Weight)

weight_init = tf.truncated_normal_initializer(mean=0.0, stddev=0.02)weight_regularizer = tf.contrib.layers.l2_regularizer(0.0001)weight_regularizer_fully = tf.contrib.layers.l2_regularizer(0.0001)

初始化(Initialization)

Xavier : tf.contrib.layers.xavier_initializer()

He : tf.contrib.layers.variance_scaling_initializer()

Normal : tf.random_normal_initializer(mean=0.0, stddev=0.02)

Truncated_normal : tf.truncated_normal_initializer(mean=0.0, stddev=0.02)

Orthogonal : tf.orthogonal_initializer(1.0) / # if relu = sqrt(2), the others = 1.0

正則化(Regularization)basic conv

x = conv(x, channels=64, kernel=3, stride=2, pad=1, pad_type='reflect', use_bias=True, sn=True, scope='conv')

partial conv (NVIDIA Partial Convolution)

x = partial_conv(x, channels=64, kernel=3, stride=2, use_bias=True, padding='SAME', sn=True, scope='partial_conv')

dilated conv

x = dilate_conv(x, channels=64, kernel=3, rate=2, use_bias=True, padding='SAME', sn=True, scope='dilate_conv')


basic deconv

x = deconv(x, channels=64, kernel=3, stride=2, padding='SAME', use_bias=True, sn=True, scope='deconv')

Fully-connected

x = fully_conneted(x, units=64, use_bias=True, sn=True, scope='fully_connected')

Pixel shuffle

x = conv_pixel_shuffle_down(x, scale_factor=2, use_bias=True, sn=True, scope='pixel_shuffle_down')x = conv_pixel_shuffle_up(x, scale_factor=2, use_bias=True, sn=True, scope='pixel_shuffle_up')

down ===> [height, width] -> [height // scale_factor, width // scale_factor]

up ===> [height, width] -> [height * scale_factor, width * scale_factor]


residual block

x = resblock(x, channels=64, is_training=is_training, use_bias=True, sn=True, scope='residual_block')x = resblock_down(x, channels=64, is_training=is_training, use_bias=True, sn=True, scope='residual_block_down')x = resblock_up(x, channels=64, is_training=is_training, use_bias=True, sn=True, scope='residual_block_up')

down ===> [height, width] -> [height // 2, width // 2]

up ===> [height, width] -> [height * 2, width * 2]

attention block

x = self_attention(x, channels=64, use_bias=True, sn=True, scope='self_attention')x = self_attention_with_pooling(x, channels=64, use_bias=True, sn=True, scope='self_attention_version_2')x = squeeze_excitation(x, channels=64, ratio=16, use_bias=True, sn=True, scope='squeeze_excitation')x = convolution_block_attention(x, channels=64, ratio=16, use_bias=True, sn=True, scope='convolution_block_attention')

Normalization

x = batch_norm(x, is_training=is_training, scope='batch_norm')x = instance_norm(x, scope='instance_norm')x = layer_norm(x, scope='layer_norm')x = group_norm(x, groups=32, scope='group_norm')x = pixel_norm(x)x = batch_instance_norm(x, scope='batch_instance_norm')x = condition_batch_norm(x, z, is_training=is_training, scope='condition_batch_norm'):x = adaptive_instance_norm(x, gamma, beta):

https://github.com/taki0112/BigGAN-Tensorflow

  https://github.com/taki0112/MUNIT-Tensorflow

Activation

x = relu(x)x = lrelu(x, alpha=0.2)x = tanh(x)x = sigmoid(x)x = swish(x)

Pooling & Resize

x = up_sample(x, scale_factor=2)x = max_pooling(x, pool_size=2)x = avg_pooling(x, pool_size=2)x = global_max_pooling(x)x = global_avg_pooling(x)x = flatten(x)x = hw_flatten(x)



classification loss

loss, accuracy = classification_loss(logit, label)

pixel loss

loss = L1_loss(x, y)loss = L2_loss(x, y)loss = huber_loss(x, y)loss = histogram_loss(x, y)

gan loss

d_loss = discriminator_loss(Ra=True, loss_func='wgan-gp', real=real_logit, fake=fake_logit)g_loss = generator_loss(Ra=True, loss_func='wgan_gp', real=real_logit, fake=fake_logit)

https://github.com/taki0112/BigGAN-Tensorflow/blob/master/BigGAN_512.py#L180

kl-divergence (z ~ N(0, 1))

loss = kl_loss(mean, logvar)

Author

Junho Kim

Github地址 : 

https://github.com/taki0112/Tensorflow-Cookbook

推薦閱讀

♥GitHub超過2600星的TensorFlow教程

《深度學習之TensorFlow:入門、原理與進階實戰》和《Python帶我起飛——入門、進階、商業實戰》兩本圖書是代碼醫生團隊精心編著的 AI入門與提高的精品圖書。配套資源豐富:配套視頻、QQ讀者群、實例源碼、 配套論壇:http://bbs.aianaconda.com   。更多請見:aianaconda.com

點擊「閱讀原文」配套圖書資源

相關焦點

  • 一行代碼切換TensorFlow與PyTorch,模型訓練也能用倆框架
    機器之心報導參與:思源你是否有時要用 PyTorch,有時又要跑 TensorFlow?這個項目就是你需要的,你可以在訓練中同時使用兩個框架,並端到端地轉換模型。也就是說 TensorFlow 寫的計算圖可以作為某個函數,直接應用到 Torch 的張量上,這操作也是很厲害了。
  • TensorFlow框架簡單介紹
    【無監督學習】DBSCAN聚類算法原理介紹,以及代碼實現 【無監督學習】Density Peaks聚類算法(局部密度聚類)前言:TensorFlow框架的安裝以及環境配置,這裡就省略了,網上可以找到許多用安裝包、pip方式安裝的方法,不再贅述。
  • TF - GAN入門:TensorFlow 2.0 的輕量級 GAN 庫
    具影響力的論文:https://github.com/tensorflow/gan#who-uses-tf-gan今天,各個推出 TF-GAN 的新版本。此版本擁有諸多升級和新功能:Cloud TPU 支持:您現在可以使用 TF-GAN 在 Google 的 Cloud TPU 上訓練 GAN。
  • MIT 深度學習基礎教程:七個基本框架TensorFlow代碼實戰
    【導讀】麻省理工學院發布一系列深度學習視頻課和代碼實戰,今天給大家介紹的是研究科學家Lex Fridman整理的常用的深度學習七個基本框架實戰,
  • TensorFlow發布JavaScript開發者的機器學習框架TensorFlow.js
    去年的 TensorFlow 開發者大會上,該框架正式升級到了 1.0 版本,逐漸成為最流行的深度學習框架。今年,TensorFlow 發布了面向 JavaScript 開發者的全新機器學習框架 TensorFlow.js。
  • 模型秒變API只需一行代碼,支持TensorFlow等框架
    作者表示,該項目具有以下優點:自動定義:Cortex 可以自動定義需要負責生產工作的 API;多框架支持:Cortex 支持多種機器學習框架,包括 TensorFlow、PyTorch、scikit-learn、XGBoost 等;CPU/GPU 支持:Cortex 能夠在 CPU 或者 GPU 上進行推理工作;回滾式更新:Cortex 可以對部署的 API
  • TensorFlow極速入門
    一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。
  • tensorflow極速入門
    一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。本教程不是 cookbook,所以不會將所有的東西都事無巨細的講到,所有的示例都將使用 python。那麼本篇教程會講到什麼?
  • 基於TensorFlow的深度學習實戰
    TensorFlow很快成為GitHub上用戶最多的深度學習框架。這個庫之所以如此流行,是因為開發人員可以輕鬆的用其來搭建、測試和部署機器學習應用。上面是一個TensorFlow的示意圖。我們不用關心這張圖具體代表什麼,但你需要知道,其中的橢圓和正方形代表節點,節點就是一些數學函數,你可以將節點分組形成各種數學計算,並得到輸出。
  • 獨家 | 一文讀懂TensorFlow(附代碼、學習資料)
    梯度下降算法(gradient descent algorithm)是一個簡單的學習過程,TF只需將每個變量一點點地往使代價不斷降低的方向移動。當然TF也提供了其他許多優化算法:只要簡單地調整一行代碼就可以使用其他的算法。TF在這裡實際上所做的是,它會在後臺給描述你的計算的那張圖裡面增加一系列新的計算操作單元用於實現反向傳播算法和梯度下降算法。
  • 資源 | NIPS 2017 Spotlight論文Bayesian GAN的TensorFlow實現
    我們展示了一種實際的貝葉斯公式,用 GAN 進行無監督和半監督學習。在該框架下,我們使用隨機梯度哈密爾頓蒙特卡羅(Hamiltonian Monte Carlo)來邊緣化生成器和判別器的權重。得到的方法很直接,且可在沒有標準幹預(如特徵匹配或小批量判別)的情況下達到不錯的性能。
  • PYTORCH與TENSORFLOW:哪種框架最適合您的深度學習項目?
    PyTorch有優點:簡單,易用,動態計算圖和有效的內存使用,科研工作者用的比較多,我們將在後面詳細討論。我們可以使用TENSORFLOW和PYTORCH開發什麼?最初,神經網絡用於解決簡單的分類問題,例如手寫數字識別或使用攝像頭識別汽車的車牌。由於有了最新的框架和NVIDIA的GPU,我們可以更快的訓練神經網絡,並解決更複雜的問題。
  • Tensorflow從入門到精通(二):附代碼實戰
    Tensorflow中的其它隨機張量的具體使用方法和屬性介紹,可以參見Tensorflow官方手冊:https://www.tensorflow.org/api_guides/python/constant_op。這裡將不在一一贅述。除了常量constant(),變量variable()也是在Tensorflow中經常會被用到的函數。變量的作用是保存和更新參數。
  • GitHub標星2000+,如何用30天啃完TensorFlow2.0?
    作者 | 梁雲1991天下苦tensorflow久矣!儘管tensorflow2.0宣稱已經為改善用戶體驗做出了巨大的改進,really easy to use,但大家學得並不輕鬆。tensorflow2.0官方文檔和tensorflow1.0官方文檔顯然是出自同一批作者之手,他們一如既往地秉承著谷歌make things complicated的風格傳統,用哈希表一般混亂的文檔結構、無法運行的範例代碼、複雜的函數嵌套調用關係、隨意插入的不常用第三方庫等技巧將讀者的懵圈程度逐步推向高潮。
  • TensorFlow 2.0正式版官宣!深度集成Keras
    深度集成Keras,更簡單、更易用,GPU訓練性能提升。這是一個革命性的新版本,歡迎來到 TensorFlow 2.0!>>>人工智慧改變中國,我們還要跨越這三座大山 | 獻禮 70 周年 TensorFlow 2.0正式版終於發布了!
  • TensorFlow 2.0凌晨發布!「改變一切,力壓PyTorch」
    不少網友表示,TensorFlow 2.0比PyTorch更好用,已經準備全面轉向這個新升級的深度學習框架了。更易用的TF2.0儘管是排名第一的深度學習框架,但TensorFlow的缺點也一直非常明顯。
  • 【官方教程】TensorFlow在圖像識別中的應用
    我們正在準備發布代碼,在最新的模型Inception-v3 上運行圖像識別任務。Inception-v3 是用來訓練2012年ImageNet的Large Visual Recognition Challenge數據集。這是計算機視覺領域的一類標準任務,模型要把整個圖像集分為1000個類別,例如「斑馬」、「達爾瑪西亞狗」,和「洗碗機」。
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    我們可以用 TensorFlow 和 PyTorch 構建什麼?神經網絡起初是被用於解決手寫數字識別或用相機識別汽車註冊車牌等簡單的分類問題。但隨著近來框架的發展以及英偉達高計算性能圖形處理單元(GPU)的進步,我們可以在 TB 級的數據上訓練神經網絡並求解遠遠更加複雜的問題。
  • 如何用30天吃掉TensorFlow2.0?
    tensorflow2.0官方文檔和tensorflow1.0官方文檔顯然是出自同一批作者之手,他們一如既往地秉承著谷歌make things complicated的風格傳統,用哈希表一般混亂的文檔結構、無法運行的範例代碼、複雜的函數嵌套調用關係、隨意插入的不常用第三方庫等技巧將讀者的懵圈程度逐步推向高潮。
  • 如何用一個Python示例入門TensorFlow?
    最近,我向大家介紹了我的 side-project,是個用 C# 寫的簡單的神經網絡項目。正如我在那篇文章中提到的,給出的解決方案離最優方案還差的太遠。假如要達到專業化使用的程度,這個解決方案還需要使用更多的數學和矩陣乘法。幸運的是,Google裡有些聰明人創造了一個做這件事情的庫——TensorFlow。