我有一个numpy形状(6,2)
[[00,01],
[10,11],
[20,21],
[30,31],
[40,41],
[50,51]]
Run Code Online (Sandbox Code Playgroud)
我需要一个步长为1的滑动窗口,窗口大小为3喜欢这个:
[[00,01,10,11,20,21],
[10,11,20,21,30,31],
[20,21,30,31,40,41],
[30,31,40,41,50,51]]
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个numpy解决方案.如果您的解决方案可以参数化原始数组的形状以及窗口大小和步长,那就太好了.
我发现这个相关的答案使用步幅有效的移动平均滤波器,但我没有看到如何指定那里的步长以及如何将窗口从3d折叠到连续的2d数组.这个滚动或滑动窗口迭代器在Python中,但是在Python中,我不确定它的效率如何.此外,它支持元素,但如果每个元素具有多个特征,则最终不会将它们连接在一起.
我很好奇每当遇到预训练词汇表未知的单词时,我如何添加正常随机化的300维向量(元素'type = tf.float32).我正在使用经过预先训练的GloVe单词嵌入,但在某些情况下,我意识到我遇到了未知单词,我想为这个新发现的未知单词创建一个正常随机化的单词向量.
问题是,在我当前的设置中,我使用tf.contrib.lookup.index_table_from_tensor根据已知词汇从单词转换为整数.此函数可以创建新的令牌并将其散列为某些预定义数量的词汇表单词,但我embed不会包含此新未知散列值的嵌入.我不确定我是否可以简单地将随机嵌入添加到embed列表的末尾.
我也想以有效的方式做到这一点,因此预先建立的张量流函数或涉及张量流函数的方法可能是最有效的.我定义了预先知道的特殊标记,例如句子结尾标记和默认未知作为空字符串("在索引0处"),但这有限,它能够学习各种不同的未知单词.我目前使用tf.nn .embedding_lookup()作为最后的嵌入步骤.
我希望能够为训练数据中的每个未知单词添加新的随机300d向量,并且我还想为测试期间可能遇到的训练中未见的任何未知标记添加预先制作的随机单词向量.这样做最有效的方法是什么?
def embed_tensor(string_tensor, trainable=True):
"""
Convert List of strings into list of indicies then into 300d vectors
"""
# ordered lists of vocab and corresponding (by index) 300d vector
vocab, embed = load_pretrained_glove()
# Set up tensorflow look up from string word to unique integer
vocab_lookup = tf.contrib.lookup.index_table_from_tensor(
mapping=tf.constant(vocab),
default_value = 0)
string_tensor = vocab_lookup.lookup(string_tensor)
# define the word embedding
embedding_init = tf.Variable(tf.constant(np.asarray(embed),
dtype=tf.float32),
trainable=trainable,
name="embed_init") …Run Code Online (Sandbox Code Playgroud)