在不争论是否实际执行此操作的利弊的情况下,我很好奇是否有人已经创建或知道在使用 keras 拟合模型期间在不同时期之间改变训练数据的简单方法。
示例:我有 100 个向量和用于训练模型的输出特征。我随机选择其中的 80 个作为训练集,将另外 20 个留作验证,然后运行:
model.fit(train_vectors,train_features,validation_data=(test_vectors,test_features))
Run Code Online (Sandbox Code Playgroud)
Keras 拟合允许我们打乱训练数据的顺序,shuffle=True
但这只是随机改变训练数据的顺序。从训练集中随机选择 40 个向量,运行一个 epoch,然后随机选择另外 40 个向量,运行另一个 epoch 等可能会很有趣。
我很困惑如何格式化我自己预先训练的权重为KerasEmbedding
层,如果我还设置mask_zero=True
。这是一个具体的玩具示例。
假设我有 4 个单词的词汇表,[1,2,3,4]
并且正在使用由以下定义的向量权重:
weight[1]=[0.1,0.2]
weight[2]=[0.3,0.4]
weight[3]=[0.5,0.6]
weight[4]=[0.7,0.8]
Run Code Online (Sandbox Code Playgroud)
我想嵌入长度不超过 5 个单词的句子,所以我必须在将它们输入到嵌入层之前对它们进行零填充。我想掩盖零,以便进一步的图层不使用它们。
阅读用于嵌入的 Keras 文档,它说 0 值不能出现在我的词汇表中。
mask_zero:输入值 0 是否是应屏蔽的特殊“填充”值。这在使用可能需要可变长度输入的循环层时很有用。如果为 True,则模型中的所有后续层都需要支持屏蔽,否则将引发异常。如果 mask_zero 设置为 True,结果,索引 0 不能在词汇表中使用(input_dim 应等于词汇表的大小 + 1)。
所以我感到困惑的是如何为嵌入层构造权重数组,因为“索引 0 不能在词汇表中使用”。如果我将权重数组构建为
[[0.1,0.2],
[0.3,0.4],
[0.5,0.6],
[0.7,0.8]]
Run Code Online (Sandbox Code Playgroud)
那么通常情况下, word1
会指向索引 1,在这种情况下,它保存 word 的权重2
。还是当您指定时mask_zero=True
,Keras 内部会使其1
指向索引 0?或者,您是否只是在索引零中添加一个零向量,如下所示?
[[0.0,0.0],
[0.1,0.2],
[0.3,0.4],
[0.5,0.6],
[0.7,0.8]]
Run Code Online (Sandbox Code Playgroud)
在我看来,第二个选项是将零放入词汇表中。换句话说,我很困惑。任何人都可以阐明这一点吗?
我正在训练一个 RNN,它的单词特征集非常少,大约 10,000 个。我计划在添加 RNN 之前从嵌入层开始,但我不清楚真正需要什么维度。我知道我可以尝试不同的值(32、64 等),但我宁愿先有一些直觉。例如,如果我使用一个 32 维的嵌入向量,那么每维只需要 3 个不同的值来完全描述空间 ( 32**3>>10000
)。
或者,对于一个字数很少的空间,是否真的需要使用嵌入层,还是从输入层直接转到 RNN 更有意义?
我正在使用PCA来减少N维数据集的维数,但是我想对较大的离群值建立鲁棒性,因此我一直在研究稳健的PCA代码。
对于传统的PCA,我使用的是python的sklearn.decomposition.PCA,它将主成分很好地返回为向量,然后可以将我的数据投影到该向量上(要清楚,我还使用SVD编写了自己的版本,因此我知道该方法有效)。我在那里找到了一些预编码的RPCA python代码(例如https://github.com/dganguli/robust-pca和https://github.com/jkarnows/rpcaADMM)。
第一个代码基于Candes等人。(2009)方法,并返回数据集D的低秩L和稀疏S矩阵。第二代码使用矩阵分解的ADMM方法(Parikh,N.,&Boyd,S. 2013)并返回X_1,X_2,X_3矩阵。我必须承认,我很难弄清楚如何将它们连接到标准PCM算法返回的主轴上。谁能提供任何指导?
具体来说,在一个数据集X中,我有N个3-D点组成的云。我通过PCA运行它:
pca=sklean.decompose.PCA(n_components=3)
pca.fit(X)
comps=pca.components_
Run Code Online (Sandbox Code Playgroud)
这3个分量是3D矢量,它们定义了我将所有点投影到的新基础。使用健壮的PCA,我得到的矩阵L + S = X。然后执行pca.fit(L)吗?我本以为RPCA会给我本征向量,但是在建立协方差矩阵或执行SVD的过程中,有内部步骤可以剔除异常值。
也许我认为“健壮的PCA”不是别人使用/编码的方式吗?