-1
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
input_dim=784
layer1_dim=10
#relu-renorm-layer 650dim
layer2_dim=100
layer3_dim=100
layer4_dim=100
layer5_dim=10
learning_rate=0.5
# train_data=np.loadtxt("g_data.txt",dtype=float).astype("float")
# train_target=train_data[:,-layer5_dim:]
# train_feature=train_data[:,0:-layer5_dim]
# test_data=np.loadtxt("g_data.txt",dtype=float).astype("float")
# test_target=test_data[:,-layer5_dim:]
# test_feature=test_data[:,0:-layer5_dim]
#print(train_target.shape)
x=tf.placeholder(tf.float32)
y=tf.placeholder(tf.float32)
w1=tf.Variable(tf.random_normal([input_dim,layer1_dim]))
w2=tf.Variable(tf.random_normal([layer1_dim,layer2_dim]))
w3=tf.Variable(tf.random_normal([layer2_dim,layer3_dim]))
w4=tf.Variable(tf.random_normal([layer3_dim,layer4_dim]))
w5=tf.Variable(tf.random_normal([layer4_dim,layer5_dim]))
b1=tf.Variable(tf.random_normal([1,layer1_dim]))
b2=tf.Variable(tf.random_normal([1,layer2_dim]))
b3=tf.Variable(tf.random_normal([1,layer3_dim]))
b4=tf.Variable(tf.random_normal([1,layer4_dim]))
b5=tf.Variable(tf.random_normal([1,layer5_dim]))
layer_1 = tf.nn.softmax(tf.add(tf.matmul(x, w1), b1))
layer_2 = tf.nn.softmax(tf.add(tf.matmul(layer_1, w2), b2))
layer_3 = tf.nn.softmax(tf.add(tf.matmul(layer_2, w3), b3))
layer_4 = tf.nn.softmax(tf.add(tf.matmul(layer_3, w4), b4))
layer_5 = tf.nn.softmax(tf.add(tf.matmul(layer_4, w5), b5))
#loss=tf.reduce_mean(tf.square(layer_5-y))
loss=tf.reduce_mean(-tf.reduce_sum(y * tf.log(layer_1), reduction_indices=[1]))
train_op = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
init = tf.global_variables_initializer()
with tf.Session() as session:
session.run(init)
# we'll make 5000 gradient descent iteration
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
_,err =session.run([train_op,loss], feed_dict={x: batch_xs, y: batch_ys})
print(err)
#print(session.run(layer_5,feed_dict={x:test_feature,y:test_target}))
correct_prediction = tf.equal(tf.argmax(layer_5, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(session.run(accuracy, feed_dict={x: mnist.test.images, y: mnist.test.labels}))
Ich folgte dem Tutorial in Tensorflow. Jedoch kann der DNN meines Codes nicht so gut funktionieren wie der MNIST des Tutorials für ML Anfänger.Warum funktioniert mein dnn nicht?
Gibt es ob mein Code falsch oder nur DNN, die mit diesem Problem nicht funktionieren kann?
Übrigens ist die Genauigkeit meines Codes 10%, was weniger als 92% des Tutorials ist.
Wie Sie mit Chargen trainieren, würde ich zunächst sagen, dass Ihre Platzhalter sein sollten: x = tf.placeholder (tf.float32, [None, 784]) und y = tf.placeholder (tf.float32, [None, 10]) –
Sie trainieren nur Ihre erste Schicht, da dies Ihr Parameter für Ihre Verlustfunktion ist, alle nächsten Schichten werden nicht aktualisiert. Sie sollten dies dann für Ihre Genauigkeit berechnen: correct_prediction = tf.equal (tf.argmax (** Schicht_1 **, 1), tf.argmax (y, 1)) –
@ AnthonyD'amato Das Problem ist nicht hier drin. – user6876743