猿问

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

配置中有一些参数,特别是当我更改max_len,hidden_size或embedding_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:无法为张量'Placeholder:0'提供形状(32、32)的值,其形状为'(?,64)'”


下面的张量流图是我理解有问题的。有没有办法了解什么亲戚max_len,hidden_size或embedding_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!")


慕尼黑8549860
浏览 161回答 1
1回答

哆啦的时光机

max_len是训练集中最长句子/文档标记的长度。它是输入张量的第二个维度(第一个是批处理)。每个句子都将被填充到这个长度。注意模型需要预定义的最长句子,因为每个标记都有其各自的权重。hidden_size 是隐藏 RNN 单元的大小,可以设置为将在每个时间步输出的任何内容。embedding_size 定义令牌表示的维度(例如,300 是 word2vec 的标准,1024 是 BERT 嵌入等的标准)。
随时随地看视频慕课网APP

相关分类

Python
我要回答