【问题标题】:Keras - input shape of large 2-dimensional ArrayKeras - 大型二维数组的输入形状
【发布时间】:2016-10-19 05:43:00
【问题描述】:

我想构建一个包含大量元素的数组 序列数(批量大小)* 字典大小(文件中的唯一单词) 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)

对此我能做些什么?

如果我尝试构建一个序列长度为 20 的 nunpy 数组,我会收到内存错误(类似于 26gb),我是否应该拆分数组并分别训练每个数组?

【问题讨论】:

    标签: python arrays keras


    【解决方案1】:

    好的,我决定拆分数组并在每次拆分时进行训练,而不是将所有内容都推送到内存中:

    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)
    

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 2012-07-04
      • 2019-07-03
      • 2018-02-16
      • 2019-01-26
      • 2019-12-12
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多