멀티 라벨 텍스트 문서 분류를위한 신경망을 만드는 중입니다. 저는 Vector (V)에 저장된 3750 단어의 어휘를 가지고 있습니다.n 에포크 이후에 gredient descent optamization이 증가한 비용 함수 값
각 입력 문서에 대해 크기가 3750 인 벡터 (I)를 만듭니다. 입력 문서의 용어가 벡터 (V)의 x 색인에있는 어휘에서 발견되면 벡터의 x 색인은 1로 표시됩니다 0. 예. [1, 1, 0, 0, 0,1, ....]
레이블의 경우 Vector (L)에 저장된 1500 개의 레이블 어휘가 있습니다. 위와 같이 각 문서에 대해 벡터 (LB)를 만들고 문서에 레이블 x가 있으면 i 번째 인덱스를 1로 표시했습니다.
레이블 데이터는 [0, 0, 1, 0, 1, ..., 0]과 같이 1550 개의 요소가있는 벡터로 표현됩니다. i 번째 요소는 i 번째 레이블이 텍스트의 양수 레이블인지 여부를 나타냅니다. 텍스트의 레이블 수는 텍스트에 따라 다릅니다.
여기 내 코드입니다.
from __future__ import division
import tensorflow as tf
import numpy as np
import time
def csv_to_numpy_array(filePath, delimiter):
return np.genfromtxt(filePath, delimiter=delimiter, dtype=None)
def import_data():
print("Load training data")
trainX = csv_to_numpy_array("/home/shahzeb/temp/train_data/trainX.csv", delimiter=",")
trainY = csv_to_numpy_array("/home/shahzeb/temp/train_data/trainY.csv", delimiter=",")
return trainX, trainY
startTime = time.time()
trainX, trainY = import_data()
learning_rate = 0.001
training_epochs = 500
# Network Parameters
n_hidden_1 = 3560 # 1st layer number of features
n_hidden_2 = 3560 # 2nd layer number of features
n_input = trainX.shape[1]
n_classes = trainY.shape[1]
# tf Graph input
input_neurons = tf.placeholder("float", [None, n_input],name="input")
known_outputs = tf.placeholder("float", [None, n_classes],name="labels")
def model(x):
with tf.name_scope("Relu_activation"):
# Hidden layer with RELU activation
w1 = tf.Variable(tf.random_normal([n_input, n_hidden_1]), name="w")
b1 = tf.Variable(tf.random_normal([n_hidden_1]), name="b")
layer_1 = tf.add(tf.matmul(x, w1), b1)
layer_1 = tf.nn.relu(layer_1)
# Hidden layer with sigmoid activation
with tf.name_scope("Sigmoid"):
w2 = tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2]), name="w")
b2 = tf.Variable(tf.random_normal([n_hidden_2]), name="b")
layer_2 = tf.add(tf.matmul(layer_1, w2), b2)
layer_2 = tf.nn.sigmoid(layer_2)
# Output layer with linear activation
with tf.name_scope("output"):
w3 = tf.Variable(tf.random_normal([n_hidden_2, n_classes]), name="w")
b3 = tf.Variable(tf.random_normal([n_classes]), name="b")
out_layer = tf.matmul(layer_2, w3) + b3
return out_layer,w1,w2,w3
model_output_OP, w_1,w_2,w_3 = model(input_neurons)
with tf.name_scope("cost"):
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=model_output_OP, labels=known_outputs))
with tf.name_scope("train"):
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
with tf.name_scope("accuracy"):
correct_predictions_OP = tf.equal(tf.argmax(model_output_OP, 1), tf.argmax(known_outputs, 1))
accuracy_OP = tf.reduce_mean(tf.cast(correct_predictions_OP, "float"), name="Accuracy_op")
with tf.name_scope("summary"):
model_output_OP_summary = tf.summary.histogram("output", model_output_OP)
accuracy_OP_summary = tf.summary.scalar("accuracy",accuracy_OP)
cost_summary = tf.summary.scalar("cost",cost)
summary_op = tf.summary.merge_all()
writer = tf.summary.FileWriter("/home/shahzeb/temp/summarylogs/", graph=tf.get_default_graph())
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
# Training cycle
for epoch in range(training_epochs):
_, c, summary,train_accuracy,iw1,iw2,iw3 = sess.run([optimizer, cost,summary_op,accuracy_OP,
w_1,w_2,w_3
],
feed_dict={input_neurons: trainX, known_outputs: trainY})
print("Epoch:", '%04d' % (epoch + 1), "cost=", "{:.9f}".format(c), "Accuracy =",train_accuracy)
#np.set_printoptions(threshold=np.nan)
#print(iw1)
#print(iw2)
#print(iw3)
#rint("--------------")
writer.add_summary(summary, epoch + 1)
saver = tf.train.Saver()
saver.save(sess, "/home/shahzeb/temp/trained_model/hidden_layer_nn.ckpt")
print("Done")
특정 기간 이후에 비용 함수 값이 증가하는 이유는 무엇입니까? 무엇이 잘못되었으며 어떻게 해결할 수 있습니까?
답장을 보내 주셔서 감사합니다. 실제로 훈련 데이터 세트에 일부 원시 데이터가 있고 데이터가 비어있는 내 모델에 대한 의문이있었습니다.이 데이터를 사용하면 비용 기능이 너무 빠르게 증가하지는 않았지만 점차적으로 증가했습니다. 일단 제거하면 비용 함수 값이 빠르게 증가하기 시작합니다. 그게 내 모델에 대해 의심 스러웠습니다. – Shahzeb