1. 程式人生 > >使用tensorflow實現gan簡單小demo

使用tensorflow實現gan簡單小demo

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

tf.set_random_seed(1)
np.random.seed(1)

BATCH_SIZE = 64
LR_G = 0.0001
LR_D = 0.0001
N_IDEAS = 5
ART_COMPONENTS = 15
PAINT_POINTS = np.vstack([np.linspace(-1,1,ART_COMPONENTS)for _ in range(BATCH_SIZE)])                                                #shape = (64,15)

print(PAINT_POINTS)

plt.plot(PAINT_POINTS[0],2*np.power(PAINT_POINTS[0],2)+1,c = '#74BCFF',lw = 3,label='upper bound')
plt.plot(PAINT_POINTS[0],1*np.power(PAINT_POINTS[0],2)+0,c = '#FF9359',lw = 3,label='lower bound')
plt.legend(loc = 'upper right')
plt.show()

def artist_works():                                            #即真實的資料
    a = np.random.uniform(1,2,size=BATCH_SIZE)[:,np.newaxis]   #shape = (64,1)
    paintings = a*np.power(PAINT_POINTS,2)+(a-1)               #shape = (64,15)
    return paintings

with tf.variable_scope('Generator'):                           #使用生成器偽造假的資料
    G_in = tf.placeholder(tf.float32,[None,N_IDEAS])           #shape = (64,5)
    G_l1 = tf.layers.dense(G_in,128,tf.nn.relu)
    G_out = tf.layers.dense(G_l1,ART_COMPONENTS)


with tf.variable_scope('Discriminator'):
    real_art = tf.placeholder(tf.float32,[None,ART_COMPONENTS],name='real_in')  #使用鑑別器來鑑別真實資料
    D_l0 = tf.layers.dense(real_art,128,tf.nn.relu,name='1')                    #並將它判別為1
    prob_artist0 = tf.layers.dense(D_l0,1,tf.nn.sigmoid,name='out')

    #fake art
    D_l1 = tf.layers.dense(G_out,128,tf.nn.relu,name='1',reuse=True)            #使用費鑑別器來判別偽造資料
    prob_artist1 = tf.layers.dense(D_l1,1,tf.nn.sigmoid,name='out',reuse=True)  #並將其判別為0

D_loss = -tf.reduce_mean(tf.log(prob_artist0)+tf.log(1-prob_artist1))           #定義誤差函式
G_loss = tf.reduce_mean(tf.log(1-prob_artist1))

train_D = tf.train.AdamOptimizer(LR_D).minimize(                                #定義優化函式
       D_loss,var_list=tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,scope='Discriminator'))

train_G = tf.train.AdamOptimizer(LR_G).minimize(
       G_loss,var_list=tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,scope='Generator'))

sess= tf.Session()                                                              #初始化流圖
sess.run(tf.global_variables_initializer())         

plt.ion()
for step in range(5000):
    artist_paintings = artist_works()
    G_ideas = np.random.randn(BATCH_SIZE,N_IDEAS)
    G_paintings,pa0,D1 = sess.run([G_out,prob_artist0,D_loss,train_D,train_G],
                                  {G_in:G_ideas,real_art:artist_paintings})[:3]

    if step%50==0:                                                               #視覺化
        plt.cla()
        plt.plot(PAINT_POINTS[0],G_paintings[0],c='#4AD631',lw=3,label='Generated painting')
        plt.plot(PAINT_POINTS[0],2*np.power(PAINT_POINTS[0],2)+1,c='#74BCFF',lw=3,label='upper bound')
        plt.plot(PAINT_POINTS[0],1*np.power(PAINT_POINTS[0],2)+0,c='#FF9359',lw=3,label='lower bound')
        plt.text(-.5,2.3,'D accuracy=%.2f (0.5 for D to converge)'%pa0.mean(),fontdict={'size':15})
        plt.text(-.5,2,'D score=%.2f (-1.38 for G to converge)'%-D1,fontdict={'size':15})
        plt.ylim((0,3));plt.legend(loc='upper right',fontsize=12);plt.draw();plt.pause(0.01)

plt.ioff()
plt.show()

本程式使用生成對抗網路(GAN)來實現一個小Demo:

目的 :使用生成器擬合形如:a*X2+(a-1)

對於a 我們使用np.random.uniform函式隨機生成(1-2之間)


為了直觀的看到生成器生成的資料,我們設定了上下兩個邊界。

最終實驗效果:


註釋:此文為莫凡Python學習筆記 莫凡tensorflow

相關推薦

使用tensorflow實現gan簡單demo

import tensorflow as tf import matplotlib.pyplot as plt import numpy as np tf.set_random_seed(1) np.random.seed(1) BATCH_SIZE = 64 LR_G

TensorFlow的一個簡單輸出Demo

TensorFlow程式 簡單輸出程式 """ TensorFlow程式 簡單輸出程式 """ from __future__ import print_function # 匯入tensorflow的包 import tensorflow as tf # try

Spring boot 簡單demo

1.開啟idea,建立新專案:Spring Initializr 2. Group和Artifact可用預設的。建議Packaging選Jar。 點選next 3.Spring boot 選1.5.版本 Web選Web選項 點選next->finash

JAVA實現截圖Demo

閒的沒事,寫個從書上看到的一個小例子,java獲取電腦螢幕內容,類似於qq截圖吧。直接上程式碼,都有註釋比較簡單。 public class ScreenPhoto { public static void main(String[] args) throws AWTException, IO

Tensorflow實現簡單的神經網路

程式程式碼: #匯入相應模組 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #讀入資料 mnist = input_data.read_data_sets('MNI

用mpvue實現一個簡單demo

序言 上一篇從騰訊後臺搭建以及搭建本地開發環境這兩個方面進行總結。在進行編碼時,這兩種搭建方式也能提供更好的開發環境,提高實際的開發效率。 這一節主要分享的便是如果用mpvue實現一個基礎的demo,這個demo主要會從mpvue的特性、結構,以及生命週期來實現,期間遇到

jquery中H5頁面長按事件(程式碼全)簡單demo

一個簡單的demo,先上圖看效果(當長按0.5秒的時候就會顯示下面的紅色div) 如果是單擊一次滑鼠並沒有到0.5秒則提示 下面上全部程式碼 注意:是H5頁面才會觸發,用谷歌除錯的時候要按F12進入手機的模式,否則不起作用(@炬) <!DOCTYPE h

Keras基於TensorFlow實現簡單分類問題

神經網路是可以用來模擬分類問題。 首先先說一下什麼是分類問題,分類問題是用於將事物打上一個標籤,通常結果為離散值。例如判斷一個學生是好學生還是壞學生,其結果是離散的,即好學生、壞學生。而回歸問題是給出一個值去逼近正確值。但是分類通常是建立在迴歸之上,例如上面的

golang 實現檔案傳輸demo

    獲取檔案資訊需要用到os. Stat介面,傳送檔案前開啟接收者(服務端),啟動客戶端先發送檔名給接收者,接收者收到檔名返回確認資訊"ok",才讀取本地檔案 傳送給接收者。 傳送者: package main import ( "fmt" "io

mxnet(gluon) 實現DQN簡單例子

參考文獻關於增強學習的基本知識可以參考第二個連結,講的挺有意思的。DQN的東西可以看第一個連結相關視訊。課程中實現了Tensorflow和pytorch的示例程式碼。本文主要是改寫成了gluon實現Q-learning的演算法流程DQN的演算法流程對於DQN的理解:增強學習中需要學習的東西是Q-table,決

Unity5+Vuforia實現一個ARDemo (1)

前言 上學期擔任了導師一門選修課的TA,課程是關於VR和AR的,所以就設計了一個簡單的AR小Demo實驗,其實都是網路上用Unity+Vuforia做的AR效果,這裡只是整理歸納一下步驟而已,分為兩部分,第一部分是顯示模型,第二部分是對模型進行簡單操作。由於這

python+django+javascript+layer 簡單demo檔案上傳

在經過上面的簡單的小部落格講解後,今天就把前端和後端的程式碼粗略的弄一下。大致的程式碼如下:  {# 上傳檔案的時候必須要在form標籤中新增屬性 enctype="multipart/form-data" #} <form method="POST" enct

利用屬性動畫Animator實現的一個demo,

這個demo只用到了 AnimatorSet和ObjectAnimator:ObjectAnimator的作用是:對某一個屬性進行精確的控制.AnimatorSet的作用是對ObjectAnimator設定的屬性進行綜合控制,如同時進行,或者精確的控制誰先進行誰後進行等這裡

使用tensorflow實現簡單的線性回歸算法

== ria oca 定義 rcp 顯示 使用 graph unicode 1 #線性回歸:用線性模型y=Wx+b擬合sin 2 import numpy as np 3 import matplotlib.pypl

Nginx+Tomcat實現負載均衡demo

一、搭建Tomcat服務         下載安裝JDK和Tomcat就不說了,太簡單了。由於是win7單機環境測試,啟動多個Tomcat服務可以通過在server.xml配置檔案中修改埠實現。準備兩個Tomcat,比如使用兩個不同版本的Tomcat(相同版本可以更改下檔名

jq實現的tabdemo

一:體會 雖然只是一個很小的demo,但途中卻遇到很多問題,問題都很小但是卻很難發現,解決過程很是惱火,偶爾靈光一閃卻又想了起來,而且混淆了很多jq和原生js中的方法,分不清楚哪個是jq中的,哪個是

hammer.js---拖動滑塊實現驗證的demo

1.先看一下效果圖  移動端實現,簡單方便,只要稍作修改比如用Math.random()函式生成一個隨機的位置,然後判斷位置差即可。 快去試一試這個很fashion的庫吧。 2.看一下HTML結構

tensorflow實現簡單神經網路層逼近一個二次函式的demo

  構造一個滿足一元二次函式y=a*x^2 + b的網路,生成一批原始資料,然後搭建簡單的神經網路,僅僅包含著一個輸入層、一個隱藏層和一個輸出層。通過TensorFlow吧隱藏層和輸出層的權重w和偏置

聊聊UDP、TCP和實現一個簡單的JAVA UDPDemo

  最近真的比較忙,很久就想寫了,可是一直苦於寫點什麼,今天腦袋靈光一閃,覺得自己再UDP方面還有些不瞭解的地方,所以要給自己掃盲。   好了,咱們進入今天的主題,先列一下提綱:   1. UDP是什麼,UDP適用於什麼場景?   2. 寫一個小Demo來加深一下UDP的理解。   3. UDP和TCP的區別

每天一個JS demo之通過事件委托實現菜單展開及選中特效。主要知識點:事件

實現 tween efi blog dem int position 16px eas <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><titl