Keras - 输入大型二维阵列的形状

时间:2016-10-19 05:43:01

标签: python arrays keras

我想构建一个包含大量元素的数组 序列数(批量大小)*字典大小(文件中的唯一字) 474683 * 22995

每个序列都会打开一些X位,这代表字典中的一个单词

句子是:"我是最好的国王" 让我们说字典是:

[我,我,国王,最好,动物,吐司......]

序列将如下所示:

[1,1,1,1,1,0,0,...]

我尝试将此内容导入keras并收到错误消息:

异常:检查模型输入时出错:预期lstm_input_9有3个维度,但是有形状的数组(93371,22995)

here我们可以看到keras期望: (batch_size,sequence_length,input_dimension)

我该怎么办?

如果我尝试构建一个具有序列长度的nunpy数组,比方说20,我会得到一个内存错误(类似26gb),我应该分开数组并分别训练每个数组吗?

1 个答案:

答案 0 :(得分:0)

好吧,我决定拆分数组并训练每一个分裂,而不是把所有东西都推到记忆中:

data_cut = 3

X = np.zeros((len(inputs)/data_cut, max_len, len(words)), dtype=np.bool)
y = np.zeros((len(inputs)/data_cut, len(words)), dtype=np.bool)


# set the appropriate indices to 1 in each one-hot vector
ins = []
for cuts in range(0,data_cut):#number of cuts
    cutLocation = len(inputs)/data_cut*cuts#location of cut
    start = (cutLocation)
    end = (len(inputs)/data_cut) * (cuts + 1)
    ins.append(inputs[start:end])#first half
    for i, example in enumerate(ins[cuts]):
        for t, word in enumerate(example):
            X[i, t, word_labels[word]] = 1
        y[i, word_labels[outputs[i]]] = 1
    model.fit(X, y, batch_size=64, nb_epoch=epochs)

当然你想要分裂然后训练分裂数量。

如果有人想要提高效率,请在下面写一下。