【发布时间】:2020-08-19 16:39:07
【问题描述】:
我有一个这样定义的 CNN:
inputs = keras.Input(shape=(1024,1))
x=inputs
# 1st convolutional block
x = keras.layers.Conv1D(16, kernel_size=(3), name='Conv_1')(x)
x = keras.layers.LeakyReLU(0.1)(x)
x = keras.layers.MaxPool1D((2), name='MaxPool_1')(x)
x = keras.layers.Flatten(name='Flatten')(x)
# Classifier
x = keras.layers.Dense(64, name='Dense_1')(x)
x = keras.layers.ReLU(name='ReLU_dense_1')(x)
x = keras.layers.Dropout(0.2)(x)
x = keras.layers.Dense(64, name='Dense_2')(x)
x = keras.layers.ReLU(name='ReLU_dense_2')(x)
我在一次 google colab 会话中对其进行训练,然后打开训练好的模型并使用 keras 的model.predict(dataarr) 来预测结果。
问题是我希望能够使用大量数据进行预测,但数据保存在 .txt 文件中,这些文件变得非常大 (>8GB),因此 google colab 没有足够的 RAM 来打开文件并将所有数据读入单个数组。
处理此问题的最佳方法是什么?我正在用 C++ 生成数据,而且我不是专家,但是当我写出数据时必须可以将数据转换为二进制,并在读取时将其转换回来。这是一个明智的选择吗?或者有没有办法让 keras 批量预测,因为 .txt 文件中的每组 1024 行都独立于下一组?
【问题讨论】:
-
当您的输入大小设置为
(1024,1)时,您的输入怎么可能大于8GB?你想预测什么?您是否尝试过批量处理? -
@Ruli 据我了解, Input(shape) 意味着模型的输入正好有 1024 个神经元,因为我传递给模型的每个数据点都用 1024 行表示.txt 文件。该模型所做的是获取每个由 1024 个数字组成的波形,并预测有多少粒子撞击探测器以创建该波形。没试过批量预测,因为不知道在keras怎么做,也不知道是不是最智能的方案