Vor kurzem studiere ich das GAN-Netzwerk, ich benutze es, um ein Mnisit Bild zu generieren, die Umgebung in meinem Computer ist Ubuntu16.04, Tensorflow, Python3.Verwenden Sie GAN zu Generator Mnist, aber studieren nichts
Der Code kann ohne jeden Fehler ausgeführt werden. Aber das Ergebnis zeigt die Netzwerkstudie nichts, durch Training ist das Ausgangsbild noch Bild laut.
Zuerst entwerfe ich ein Generator-Netzwerk: Der Eingang ist verrauschte Daten der 784-Dimension, durch eine verborgene Schicht und Regel, generieren Sie ein Bild der 784-Dimension.
Dann entwerfe ich ein Diskriminator-Netzwerk: Die Eingabe ist echtes Bild und gefälschtes Bild, durch eine versteckte Ebene und Regel, die Ausgabe ist Logiken 1 Dimension.
Dann habe ich die generator_loss und discinator_loss definiert, dann Generator und Diskriminator trainieren.Es kann laufen, aber das Ergebnis zeigt die Netzwerkstudie nichts, der Verlust kann Konvergenz nicht.
import tensorflow as tf
import numpy as np
import tensorflow.contrib.slim as slim
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/home/zyw/data/tensor_mnist-master/MNIST_data/",one_hot=True)
batch_size = 100
G_in = tf.placeholder(tf.float32,[None,784])
G_h1 = tf.layers.dense(G_in, 128)
G_h1 = tf.maximum(0.01 * G_h1, G_h1)
G_out = tf.tanh(tf.layers.dense(G_h1, 784))
real = tf.placeholder(tf.float32,[None,784])
Dl0 = tf.layers.dense(G_out, 128)
Dl0 = tf.maximum(0.01 * Dl0, Dl0)
p0 = tf.layers.dense(Dl0, 1)
Dl1 = tf.layers.dense(real, 128)
Dl1 = tf.maximum(0.01 * Dl1, Dl1)
p1 = tf.layers.dense(Dl1, 1)
G_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits =p0,labels=tf.ones_like(p0)*0.9))
D_real_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits =p1,labels=tf.ones_like(p1)*0.9))
D_fake_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits =p0,labels=tf.zeros_like(p0)))
D_total_loss = tf.add(D_fake_loss,D_real_loss)
G_train = tf.train.AdamOptimizer(0.01).minimize(G_loss)
D_train = tf.train.AdamOptimizer(0.01).minimize(D_total_loss)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for i in range(1000):
mnist_data,_ = mnist.train.next_batch(batch_size)
# noise_org = tf.random_normal([batch_size,784],stddev = 0.1,dtype = tf.float32)
noise_org = np.random.randn(batch_size, 784)
a,b,dloss= sess.run([D_real_loss,D_fake_loss,D_total_loss,G_train,D_train],feed_dict={G_in:noise_org,real:mnist_data})[:3]
if i%100==0:
print(a,b,dloss)
#test_generative_image
noise_org = np.random.randn(1, 784)
image = sess.run(G_out,feed_dict ={G_in:noise_org})
outimage = tf.reshape(image, [28,28])
plt.imshow(outimage.eval(),cmap='gray')
plt.show()
print('ok')
das Ergebnis:
0.80509 0.63548 1.44057
0.33512 0.20223 0.53735
0.332536 0.97737 1.30991
0.328048 0.814452 1.1425
0.326688 0.411907 0.738596
0.325864 0.570807 0.896671
0.325575 0.970406 1.29598
0.325421 1.02487 1.35029
0.325222 1.34089 1.66612
0.325217 0.747129 1.07235
Bitte stellen Sie Ihre Frage klarer.als es geschrieben ist es schrecklich zu lesen.Sie haben wirklich nicht 5 Sekunden zu Leerzeichen oder neue Zeilen zu ersetzen, oder Satzzeichen zu korrigieren, Gosh das ist schmerzhaft – Julien
das ist mein erstes Zeit stackoverflow zu verwenden, um eine Frage zu stellen und mein Englisch in nicht gut, danke für Ihre Erinnerung, ich werde es korrigieren. – zyw