ich ein einfaches neuronales Netz aufgebaut haben, um Daten in nur zwei Klassen zu klassifizieren Daten ist so etwas wie diesesNull Kosten in tensorflow Multi perceptron
34.62365962451697,78.0246928153624,0
60.18259938620976,86.30855209546826,1
Es gibt keine Nullwerte in Daten sind so gibt es keine Quelle für solche Kosten .Cost Null mit adagrad Optimierers und nan mit Gradientenabfallsaktualisierung optimiser Hier ist der Code
import numpy as ny
import tensorflow as tf
def load():
data = []
for line in open("ex2data1.txt"):
row = line.split(',')
x = ny.array(row, dtype='|S4')
data.append(x.astype(ny.float64))
return ny.array(data)
def multilayer_perceptron(x, weights, biases):
# Hidden layer with ReLU activation
layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
layer_1 = tf.nn.relu(layer_1)
# Hidden layer with ReLU activation
layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
layer_2 = tf.nn.relu(layer_2)
# Output layer with linear activation
out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
return out_layer
# Store layers weight & bias
weights = {
'h1': tf.Variable(tf.random_normal([2, 15])),
'h2': tf.Variable(tf.random_normal([15, 15])),
'out': tf.Variable(tf.random_normal([15, 1]))
}
biases = {
'b1': tf.Variable(tf.random_normal([15])),
'b2': tf.Variable(tf.random_normal([15])),
'out': tf.Variable(tf.random_normal([1]))
}
data = load()
Xdata = ny.array(data[:, 0:2])
Ydata = ny.array(data[:, 2])
Ydata = ny.array(Ydata.reshape([100, 1]))
# Step 2 - Create input and output placeholders for data
X = tf.placeholder("float", [None, 2], name="X")
Y = tf.placeholder("float", [None, 1], name="Y")
pred = multilayer_perceptron(X, weights, biases)
# Minimize error using cross entropy
with tf.name_scope("cost"):
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=Y))
optimizer = tf.train.AdagradOptimizer(0.001).minimize(cost)
tf.summary.scalar("cost", cost)
init = tf.global_variables_initializer()
summary_op = tf.summary.merge_all()
with tf.Session() as sess:
sess.run(init)
print(Xdata)
print(Ydata)
# Step 12 train the model
for i in range(1000):
sess.run(optimizer, feed_dict={X: Xdata, Y: Ydata})
if (i % 100 == 0):
print(sess.run(cost, feed_dict={X: Xdata, Y: Ydata}))
Zunächst einmal, normalisieren Sie alle Werte zwischen 0 und 1. Zweitens, _what Sie denken, null Kosten ist nicht möglich_. Nullkosten bedeuten im Grunde, dass Sie perfekt mit den Trainingsdaten übereinstimmen (Sie können überanpassen). Nullkosten sind in keiner Weise mit 0 Werten in Ihren Testdaten verbunden. –
Daten sind in Ordnung, ich habe bereits die gleichen Daten in octave.Nvm getestet, Problem ist gelöst. –