私は基本的なニューラルネットワーク分類子に取り組んでいます。目標は、3ラベルのデータグループに基づいてNNを訓練し、次に値を予測することです。データ図は次のとおりです。基本的なロジスティッククラシファイアのSoftmax
私のコードは、ガベージの回答を返します。助言がありますか?
現在のコードは以下の通りです:
import tensorflow as tf
import numpy as np
#increased the number of epoch
epochs = 100000
# For eq100tion y = b + 0.1, sample data below
myImportedDatax1_np = np.array([[.1],[.1],[.2],[.2],[.3],[.3],[.4],[.4],[.1],[.1],[.2],[.2],],dtype=float)
myImportedDatax2_np = np.array([[.1],[.2],[.1],[.2],[.3],[.4],[.3],[.4],[.3],[.4],[.3],[.4]],dtype=float)
combined_Imported_Data_x = np.append(myImportedDatax1_np, myImportedDatax2_np, axis=1)
myImportedDatay_np = np.array([0,0,0,0,1,1,1,1,2,2,2,2],dtype=int)
number_unique_labels = myImportedDatay_np.max()+1
myImportedDatay_np_one_hot = np.zeros((myImportedDatay_np.size, number_unique_labels))
myImportedDatay_np_one_hot[np.arange(myImportedDatay_np.size),myImportedDatay_np] = 1
print(myImportedDatay_np_one_hot)
x = tf.placeholder(tf.float32, [None, 2], name='x')
y_true = tf.placeholder(tf.float32, [None, number_unique_labels], name='y_true')
nodes_Hidden_Layer_1 = 6
number_Inputs = 2
number_Outputs = 3
W1 = tf.Variable(tf.random_normal([number_Inputs, nodes_Hidden_Layer_1], stddev=0.03), name='W1')
b1 = tf.Variable(tf.random_normal([nodes_Hidden_Layer_1]), name='b1')
W2 = tf.Variable(tf.random_normal([nodes_Hidden_Layer_1, number_Outputs], stddev=0.03), name='W2')
b2 = tf.Variable(tf.random_normal([number_Outputs]), name='b2')
hidden_out = tf.add(tf.matmul(x, W1), b1)
hidden_out = tf.nn.relu(hidden_out)
y_ = (tf.add(tf.matmul(hidden_out, W2), b2))
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_true, logits=y_))
optimiser = tf.train.GradientDescentOptimizer(0.7).minimize(cost)
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
# initialise the variables
sess.run(init_op)
for epoch in range(epochs):
_, cost_now = sess.run([optimiser, cost], {x: combined_Imported_Data_x, y_true: myImportedDatay_np_one_hot})
print("Predicted values are:")
print(sess.run(y_, {x: combined_Imported_Data_x}))
あなたは 'ロジスティック分類器'を作成したいと思っていますが、代わりに線形回帰をしているようです。特に必要なものはどれですか?それが本当に分類子であれば、なぜ非バイナリ値で1つの出力しか持たないのですか? 3点の出力を持ち、真のラベルを0,1,2とし、それらをワンホットベクトルに変換し、SoftMax + Cross Entropyを使用してモデルを訓練する方が理にかなっていませんか? –
大丈夫、あなたの意見が分かります。 –
私はコードを従来のロジスティック分類器に変更しました。しかし、私はsoftmaxを使って正解を得ていません。助言がありますか? –