我想构建一个包含大量元素的数组 序列数(批量大小)*字典大小(文件中的唯一字) 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),我应该分开数组并分别训练每个数组吗?
答案 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)
当然你想要分裂然后训练分裂数量。
如果有人想要提高效率,请在下面写一下。