ich eine sehr einfache logistische Regression tensorflow Programm haben, die wie folgt aussieht:Kann nicht einfach Tensorflow Logistic Regression Programm mit Sigmoid-Aktivierungsfunktion zu arbeiten.
#!/usr/bin/env python3
import tensorflow as tf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import model_selection
import sys
gender_df = pd.read_csv('data/binary_data.csv')
# Shuffle our data
gender_df = gender_df.sample(frac=1).reset_index(drop=True)
print (gender_df.columns)
train_x,test_x, train_y, test_y = model_selection.train_test_split(gender_df['HEIGHT'],gender_df['GENDER'],test_size = 0.3)
tmp = np.asarray(train_x)
tmp.resize([train_x.shape[0],1])
train_x = tmp
tmp = np.asarray(train_y)
tmp = np.resize(tmp,[train_y.shape[0],2])
train_y = tmp
tmp = np.asarray(test_x)
tmp.resize([test_x.shape[0],1])
test_x = tmp
tmp = np.asarray(test_y)
tmp = np.resize(tmp,[test_y.shape[0],2])
test_y = tmp
n_samples = train_x.shape[0]
x = tf.placeholder(tf.float32, [None,1])
y = tf.placeholder(tf.float32,[None,2])
W = tf.Variable(tf.zeros([1,2]),dtype = tf.float32)
b = tf.Variable(tf.zeros([1]),dtype = tf.float32)
a = tf.nn.sigmoid((W * x) + b)
learning_rate = 0.001
cross_entropy = tf.reduce_mean(-(y*tf.log(a) + (1 - y) * tf.log(1-a)))
train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(1000):
_,l = sess.run([train_step, cross_entropy], feed_dict = {x: train_x, y:train_y})
if epoch % 50 == 0:
print ('loss = %f' %(l))
correct = tf.equal(tf.argmax(a,1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct,'float'))
print ('Accuracy: ', accuracy.eval({x: test_x, y:test_y}))
Es ist eine ziemlich einfache binäre Klassifizierung logistische Regressionsprogramm, das 100 Zeilen Beispieldaten nimmt die zwei Spalten haben, Geschlecht einen Wert hat, entweder 0 (weiblich) oder 1 (männlich). Höhe ist in Zentimetern.
Ich versuche, eine Vorhersage des Geschlechts basierend auf Höhe zu machen, aber der Verlustwert scheint nicht auf ein Minimum zu konvergieren, zusätzlich variieren die Kostenwerte und die Genauigkeit wild von einem Lauf zum nächsten, obwohl Die Daten, die betrachtet werden, sind die gleichen Daten.
ich einen Lauf haben kann, wo die Genauigkeit 0,8 ist und der nächste Lauf der Genauigkeit 0,2
Auch ich aus irgendeinem Grunde festgestellt, dass der erste Wert Verlust ist immer: Verlust = 0,693147 Aber für Beispiel der Rest von Verlustrechnungen wie folgt aussehen kann: Verlust = 1,397364
Verlust = 1,397516
Verlust = 1,397514
Verlust = 1.397515
Verlust = 1,397514 ...
Ich bin etwas verwirrt über das, was passiert.
Nutze ich die richtige Sigmoid-Funktion? Von meinem Verständnis, ich brauche nur softmax, wenn ich eine logistische Regression Problem mit mehreren Klassen und für eine einfache binäre Klassifizierung kann ich tf.sigmoid() verwenden. Muss ich auch den 'b' Parameter zur Sigmoid Funktion hinzufügen? Sollte ich es auf zufällige Werte anstatt Nullen setzen?
Kann auch jemand ein einfaches binäres Klassifikationsproblembeispiel vorschlagen, das logistische Regression und Tensorflow verwendet, die nicht die Mnist- oder Irisdatenbanken benutzen?
Jede Hilfe wird geschätzt.
Dank
Danke. Ich ließ die Matrixnotation fallen und es schien die Dinge besser zu machen, aber ich stoße jetzt auf ein Problem, wenn ich versuche, die Genauigkeit auszudrucken. – redmage123
Gah. Ich habe vergessen zu beenden. Der Fehler, den ich bekomme, ist InvalidArgumentError (siehe oben für Traceback): Erwartete Dimension im Bereich [-1, 1], aber erhalten 1 Dies geschieht in der Zeile, in der ich Genauigkeit laufen lasse, um die Genauigkeit auszudrucken. – redmage123