在基于注意力的模型中如何为配置设置参数?

时间:2019-04-16 11:10:14

标签: python tensorflow attention-model

配置中有一些参数,尤其是当我更改max_lenhidden_sizeembedding_size时。

config = {
    "max_len": 64,
    "hidden_size": 64,
    "vocab_size": vocab_size,
    "embedding_size": 128,
    "n_class": 15,
    "learning_rate": 1e-3,
    "batch_size": 32,
    "train_epoch": 20
}

我得到一个错误:

  

“ ValueError:无法为形状为((?,64)'的Tensor'占位符:0'输入形状(32,32)的值”“

下面的张量流图是我有一个问题的理解。有没有一种方法可以理解需要设置哪些相对的max_lenhidden_sizeembedding_size参数,以避免出现上面的错误?

        embeddings_var = tf.Variable(tf.random_uniform([self.vocab_size, self.embedding_size], -1.0, 1.0),
                                     trainable=True)
        batch_embedded = tf.nn.embedding_lookup(embeddings_var, self.x)
        # multi-head attention
        ma = multihead_attention(queries=batch_embedded, keys=batch_embedded)
        # FFN(x) = LN(x + point-wisely NN(x))
        outputs = feedforward(ma, [self.hidden_size, self.embedding_size])
        outputs = tf.reshape(outputs, [-1, self.max_len * self.embedding_size])
        logits = tf.layers.dense(outputs, units=self.n_class)

        self.loss = tf.reduce_mean(
            tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=self.label))
        self.prediction = tf.argmax(tf.nn.softmax(logits), 1)

        # optimization
        loss_to_minimize = self.loss
        tvars = tf.trainable_variables()
        gradients = tf.gradients(loss_to_minimize, tvars, aggregation_method=tf.AggregationMethod.EXPERIMENTAL_TREE)
        grads, global_norm = tf.clip_by_global_norm(gradients, 1.0)

        self.global_step = tf.Variable(0, name="global_step", trainable=False)
        self.optimizer = tf.train.AdamOptimizer(learning_rate=self.learning_rate)
        self.train_op = self.optimizer.apply_gradients(zip(grads, tvars), global_step=self.global_step,
                                                       name='train_step')
        print("graph built successfully!")

1 个答案:

答案 0 :(得分:1)

max_len是训练集中最长的句子/文档长度。这是输入张量的第二维(第一个维是批处理)。

每个句子将以此长度填充。注意模型需要预定义的最长句子,因为每个标记都有其各自的权重。

hidden_size是隐藏的RNN单元的大小,可以设置为每个时间步长将输出的任何值。

embedding_size定义了令牌表示的维度(例如,word2vec标准为300,BERT嵌入标准为1024等)。