Как уменьшить потери в модели Word2Vec на тензор потока - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь запустить модель word2vec.это работает, но я запутался, почему потери никогда не уменьшаются.оно всегда составляет около 300.

, пожалуйста, дайте мне несколько советов о том, почему это произошло и как это исправить.

представление вывода

Я вставляючасть кода о графике, надеемся, что это полезно.

graph = tf.Graph()
with graph.as_default():
    train_inputs = tf.placeholder(tf.int32, shape=[batch_size],name='train_inputs')
    train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1],name='train_labels')
    valid_dataset = tf.constant(valid_examples, dtype=tf.int32)


    with tf.device('/cpu:0'):
        with tf.name_scope('Embeddings'):
            embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0),name='Embeddings')
            embed = tf.nn.embedding_lookup(embeddings, train_inputs)
            tf.summary.histogram(name ='Embeddings', values = embeddings)

        with tf.name_scope('Weights'):
            nce_weights = tf.Variable(tf.truncated_normal([vocabulary_size, embedding_size],stddev=1.0 / math.sqrt(embedding_size)),name='Weights')
            tf.summary.histogram(name ='Weights', values = nce_weights)

        with tf.name_scope('Biases'):
            nce_biases = tf.Variable(tf.zeros([vocabulary_size]),dtype=tf.float32,name='Biases')
            tf.summary.histogram(name ='Biases', values = nce_biases)

    with tf.name_scope('Loss'):
        output_layer = tf.nn.nce_loss(weights=nce_weights,
                                  biases=nce_biases,
                                  inputs=embed,
                                  labels=train_labels,
                                  num_sampled=num_sampled,
                                  num_classes=vocabulary_size)
        loss = tf.reduce_mean(output_layer)
        tf.summary.scalar('loss', loss)

    with tf.name_scope('Optimizer'):
        #optimizer = tf.train.GradientDescentOptimizer(1.0).minimize(loss)
        optimizer = tf.train.AdamOptimizer(1.0).minimize(loss)

    with tf.name_scope('normalized'):
        norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keep_dims=True))
        normalized_embeddings = embeddings / norm
        valid_embeddings = tf.nn.embedding_lookup(normalized_embeddings, valid_dataset)
    merged = tf.summary.merge_all()
    init = tf.global_variables_initializer()

, тогда шаг обучения будет таким:

with tf.Session(graph=graph) as sess:
# We must initialize all variables before we use them.
    init.run()
    logging.info("Initialized")
    writer = tf.summary.FileWriter("TB/", graph = sess.graph)#TensorBoard
    for step in xrange(num_steps):
        batch_inputs, batch_labels = generate_batch(batch_size, num_skips, skip_window)


        nextDict = {train_inputs: batch_inputs, train_labels: batch_labels}

        stepMerged,stepLoss = sess.run([merged,loss],feed_dict=nextDict)
        logging.info("loss for this step("+str(step)+"):"+str(float(stepLoss)))

РЕДАКТИРОВАТЬ 1:

Я делаю снимок экрана с отчетом TensorBoard, но он временно, потому что обучение продолжается.

сейчас Шаги обучения прошли 120 000 раз (план 200 КБ), около 22 часов.

отчет о временных потерях

...