Irisデータセットで標準NNを実行しようとしています。ラベルは種に応じて0,1,2の値を持つことができる単一の列です。私はx軸にフィーチャを、yのサンプルを転置します。Tensorflow Irisデータセットが収束しない
関心領域:コスト関数 - 誰もがあらかじめ作成されたものを使用しているようですが、私のデータはワンホットエンコードではないので標準損失を使用しています。オプティマイザ - 私はそれをブラックボックスとして使用しており、コストを適切に更新するかどうかはわかりません。
ご協力いただきありがとうございます。
import tensorflow as tf
import numpy as np
import pandas as pd
import tensorflow as tf
def create_layer(previous_layer, weight, bias, activation_function=None):
z = tf.add(tf.matmul(weight, previous_layer), bias)
if activation_function is None:
return z
a = activation_function(z)
return a
def cost_compute(prediction, correct_values):
return tf.nn.softmax_cross_entropy_with_logits(logits = prediction, labels = correct_values)
input_features = 4
n_hidden_units1 = 10
n_hidden_units2 = 14
n_hidden_units3 = 12
n_hidden_units4 = 1
rate = .000001
weights = dict(
w1=tf.Variable(tf.random_normal([n_hidden_units1, input_features])),
w2=tf.Variable(tf.random_normal([n_hidden_units2, n_hidden_units1])),
w3=tf.Variable(tf.random_normal([n_hidden_units3, n_hidden_units2])),
w4=tf.Variable(tf.random_normal([n_hidden_units4, n_hidden_units3]))
)
biases = dict(
b1=tf.Variable(tf.zeros([n_hidden_units1, 1])),
b2=tf.Variable(tf.zeros([n_hidden_units2, 1])),
b3=tf.Variable(tf.zeros([n_hidden_units3, 1])),
b4=tf.Variable(tf.zeros([n_hidden_units4, 1]))
)
train = pd.read_csv("/Users/yazen/Desktop/datasets/iris_training.csv")
test = pd.read_csv("/Users/yazen/Desktop/datasets/iris_test.csv")
train.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'species']
test.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'species']
train_labels = np.expand_dims(train['species'].as_matrix(), 1)
test_labels = np.expand_dims(test['species'].as_matrix(), 1)
train_features = train.drop('species', axis=1)
test_features = test.drop('species', axis=1)
test_labels = test_labels.transpose()
train_labels = train_labels.transpose()
test_features = test_features.transpose()
train_features = train_features.transpose()
x = tf.placeholder("float32", [4, None], name="asdfadsf")
y = tf.placeholder("float32", [1, None], name="asdfasdf2")
layer = create_layer(x, weights['w1'], biases['b1'], tf.nn.relu)
layer = create_layer(layer, weights['w2'], biases['b2'], tf.nn.relu)
layer = create_layer(layer, weights['w3'], biases['b3'], tf.nn.relu)
Z4 = create_layer(layer, weights['w4'], biases['b4'])
cost = cost_compute(Z4, y)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for iteration in range(1,50):
optimizer = tf.train.GradientDescentOptimizer(learning_rate=rate).minimize(cost)
_, c = sess.run([optimizer, cost], feed_dict={x: train_features, y: train_labels})
print("Iteration " + str(iteration) + " cost: " + str(c))
prediction = tf.equal(Z4, y)
accuracy = tf.reduce_mean(tf.cast(prediction, "float"))
print(sess.run(Z4, feed_dict={x: train_features, y: train_labels}))
print(accuracy.eval({x: train_features, y: train_labels}))
高い学習率を試しましたか? –
@JakubBartczukこんにちはJakubはとても感謝しています。学習率が高いほど私は収束しましたが、私の価値はすべて間違っているようです。私は何が間違っているのか分かりません(0%の精度)。私はこのモデルをどのように改善できるかについて何か提案がありますか? – user3204416