Глубокое обучение: как написать псевдоалгоритм для сетевой архитектуры - PullRequest
0 голосов
/ 11 июня 2019

Как мне написать псевдоалгоритм для любой модели глубокого обучения?

Я просматривал несколько статей глубокого обучения на графике, и есть псевдоалгоритм для сетевой архитектуры, Пример:

enter image description here

Это общая архитектура, описанная в статье.

Я хочу написать один псевдоалгоритм для одной пользовательской сети, Структура сети очень проста, Это классификация предложений с использованием динамическогоrnn.

Input is sentence [ batch_size x max_sentence_length x embedding_dim ]

labels are [ batch_size ]

сеть отправляет предложения в rnn и получает векторы объектов после отправки этого вектора функций в одну другую нано-сеть для части внимания и получения вектора внимания, после получения вектора внимания добавьте один плотный слой для изменения формывекторы признаков и получают значения вероятности в форме [batch_size]

Итак, нано-сеть:

import numpy as np
#simple soft attention

def nano_network( logits, lstm_units ):

    # just for example 
    logits_ = tf.reshape(logits,[-1, lstm_units])
    attention_size = tf.get_variable(name='attention_size',
                                         shape=[lstm_units,1],
                                         dtype=tf.float32,
                                         initializer=tf.random_uniform_initializer(-0.01,0.01))

    attention_matmul =  tf.matmul(logits_,attention_size)
    output_reshape = tf.reshape(attention_matmul,[tf.shape(logits)[0],tf.shape(logits)[1],-1])
    return tf.squeeze(output_reshape)

Простая сеть рН:

import tensorflow as tf

#simple network

class Base_model(object):

    def __init__(self):

        tf.reset_default_graph()

        # define placeholders
        self.sentences        = tf.placeholder(tf.float32, [12, 50, 10], name='sentences') # batch_size x max_sentence_length x dim
        self.targets          = tf.placeholder(tf.int32, [12], name='labels'  )


        with tf.variable_scope('dynamic_rnn') as scope:
            cell = tf.nn.rnn_cell.LSTMCell(num_units=5, state_is_tuple=True)
            outputs, _states = tf.nn.dynamic_rnn(cell, self.sentences, dtype=tf.float32)


        #attention function
        self.output_s = nano_network(outputs,5)


        # simple linear projection
        self.output = tf.layers.dense(self.output_s,2)

        cross_entropy  = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=self.targets,logits=self.output)

        #loss calculation
        loss = tf.reduce_mean(cross_entropy)

        #train / network weights update
        self.train = tf.train.AdamOptimizer().minimize(loss)


        self.out = { 'loss':loss, 'train':self.train } 

Если кто-то хочет запуститьэтот код, вот случайные значения для тестирования кода:

# #model train

# def rand_exec(model):
#     with tf.Session() as sess:
#         sess.run(tf.global_variables_initializer())

#         for i in range(100):
#             loss_ = sess.run(model.out,
#                      feed_dict = {
#                          model.sentences  : np.random.randint(0, 10, [12,50,10]),
#                          model.targets  : np.random.randint(0, 2, [12] )})

#             print(loss_['loss'])

# # wdim, hdim, vocab_size, num_labels,threshold,relation_embeddings,relation_dim,t,adj_file
# if __name__ == '__main__':

#     model = Base_model()
#     out = rand_exec(model)

Теперь я хочу написать псевдо-алгоритм для этого сиmple network.

Я пытался преобразовать эту сетевую архитектуру в псевдоалгоритм. Вот мой псевдокод:

enter image description here

Вот текстовый формат этого алгоритма

Но я запутался, если он правильный или нет, как правило обновления параметров и другие вещи в алгоритме.

Я был бы очень признателен, если кто-нибудьдайте мне несколько советов о том, как написать псевдоалгоритм для этой сетевой архитектуры.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...