- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 csv 太大而无法一次读入内存,所以我想将它分块并用它一 block 一 block 地拟合 keras 模型。我想我误解了 fit_generator 函数是如何工作的,因为我不断收到 StopIteration
错误,即使 chunksize
和 steps_per_epoch
正确说明了多少行在我的 csv 中。
代码:
import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
np.random.seed(26)
x_train_generator = pd.read_csv('X_train.csv', header=None, chunksize=150000)
y_train_generator = pd.read_csv('Y_train.csv', header=None, chunksize=150000)
x_test_generator = pd.read_csv('X_test.csv', header=None, chunksize=50000)
y_test_generator = pd.read_csv('Y_test.csv', header=None, chunksize=50000)
model = Sequential()
model.add(Dense(500, input_dim=1132, activation='tanh'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', metrics=['accuracy'],
optimizer='adam')
model.fit_generator((x_train_generator.get_chunk().as_matrix(),
y_train_generator.get_chunk().as_matrix()),
steps_per_epoch=37,
epochs=1,
verbose=2,
validation_data=(x_test_generator.get_chunk().as_matrix(),
y_test_generator.get_chunk().as_matrix()),
validation_steps=37
)
错误输出:
Exception in thread Thread-107:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "/home/user/myenv/local/lib/python2.7/site-packages/keras/utils/data_utils.py", line 568, in data_generator_task
generator_output = next(self._generator)
TypeError: tuple object is not an iterator
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
/home/user/tmp_keras.py in <module>()
22 verbose=2,
23 validation_data=(x_test_generator.get_chunk().as_matrix(), y_test_generator.get_chunk().as_matrix()),
---> 24 validation_steps=37
25 )
26
/home/user/myenv/local/lib/python2.7/site-packages/keras/legacy/interfaces.pyc in wrapper(*args, **kwargs)
85 warnings.warn('Update your `' + object_name +
86 '` call to the Keras 2 API: ' + signature, stacklevel=2)
---> 87 return func(*args, **kwargs)
88 wrapper._original_function = func
89 return wrapper
/home/user/myenv/local/lib/python2.7/site-packages/keras/models.pyc in fit_generator(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_$ueue_size, workers, use_multiprocessing, initial_epoch)
1119 workers=workers,
1120 use_multiprocessing=use_multiprocessing,
-> 1121 initial_epoch=initial_epoch)
1122
1123 @interfaces.legacy_generator_methods_support
/home/user/myenv/local/lib/python2.7/site-packages/keras/legacy/interfaces.pyc in wrapper(*args, **kwargs)
85 warnings.warn('Update your `' + object_name +
86 '` call to the Keras 2 API: ' + signature, stacklevel=2)
---> 87 return func(*args, **kwargs)
88 wrapper._original_function = func
89 return wrapper
/home/user/myenv/local/lib/python2.7/site-packages/keras/engine/training.pyc in fit_generator(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weig
ht, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)
2009 batch_index = 0
2010 while steps_done < steps_per_epoch:
-> 2011 generator_output = next(output_generator)
2012
2013 if not hasattr(generator_output, '__len__'):
StopIteration:
奇怪的是,如果我将 fit_generator() 包装在 while 1: try: ... except StopIteration:
中,它会成功运行。
我试过在没有 get_chunk().as_matrix()
函数的 fit_generator 参数中使用 x/y_train_generator
但它失败了,因为我没有传递 keras a numpy 数组。
最佳答案
如评论中所述,您的问题是 Pandas .get_chunk()
返回一个迭代器,这是调用 .as_matrix()
方法的对象(并且这不是您想要发生的事情 - 您希望 .get_chunk()
返回的迭代器首先转换为 DataFrame,然后是 .as_matrix()
被调用)。
要重构您的代码,您需要一个循环,并且您需要在循环内更新您的模型。我有两个建议给你:
(最简单) 重新构造上面的程序:在调用 .as_matrix()
之前,将 Pandas 中的每个 block 作为 DataFrame 进行循环它。这样,您实际上是为您的 X_train
、y_train
、X_test
、y_test
数据获取一个具体的 DataFrame,而不是一个IO迭代器。然后,您可以使用新的数据 block 更新经过训练的模型。 (如果您已经有一个经过训练的模型,并且您再次调用 .fit()
,它将更新现有模型。)
(使用 Keras 功能而不是 Pandas 功能)利用内置的 Keras 实用程序读取大型数据集 - 具体来说,一个名为 HDF5Matrix (link to Keras documentation) 的 Keras 实用程序以 block 的形式从 HDF5 文件中读取数据,并且该数据将被透明地视为 Numpy 数组。像这样:
def load_data(path_todata, start_ix, n_samples):
"""
This works for loading testing or training data.
This assumes input data have been named "inputs",
output data have been named "outputs" in HDF5 file,
and that you are grabbing n_samples from the file.
"""
X = HDF5Matrix(path_to_training_data, 'inputs', start_ix, start_ix + n_samples)
y = HDF5Matrix(path_to_training_data, 'outputs', start_ix, start_ix + n_samples)
return (X,y)
X_train, y_train = load_data(path_to_training_h5, train_start_ix, n_training_samples)
X_test, y_test = load_data(path_to_testing_h5, testing_start_ix, n_testing_samples)
与解决方案 #1 一样,这将在一个总体 for 循环中构建,该循环在每次迭代中更新 start_ix
和 n_samples
每次迭代中的模型。有关如何使用 HDF5Matrix 的另一个说明,请参阅 this example来自 Github 用户@jfsantos。
关于python - Keras fit_generator 与 pandas 迭代器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46638219/
我如何使用 keras 函数 fit_generator() 训练并同时保存具有最低验证损失的模型权重? 最佳答案 您可以在定义检查点时设置save_best_only=True: from kera
我应该何时以及如何使用 fit_generator?fit 和 fit_generator 有什么区别? 最佳答案 如果您已准备好所有必要方面的数据和标签,并且可以简单地将它们分配给数组 x 和 y,
使用 Keras 训练 CNN,即使我做了 model.compile,keras。 fit_generator 抛出一个运行时错误,提示在使用 fit 之前先编译我的模型。 Error: Using
我目前正在生成一个data_generate(batch_size),它接受batch_size 作为参数。 我的网络是多输入网络,有 33 个形状为 (45,8,3) 的输入 如果批量大小 = 1
def Generate(): i = 0 while 1: i = i%int(Numb/batch_size) my_input_batch = my_input[i*batch_
我有一个 Keras 模型,有 4 个张量输入和 1 个数组输出。使用 model.fit 可以正常工作方法 model.fit([inputUM, inputMU, inputUU, inputMM
我有一个包含 9 列的数据集,最后一个是带标题的 csv 格式的目标变量。我正在尝试编写一个生成器来在 keras 中训练模型。代码如下。训练在第一个时期运行,但在完成之前就永远停止/挂起。 from
我正在制作一个输入形状为 (56088,22050,1) 的语音识别模型,它作为一个整体可以从 .npy 文件(大小约为 5GB)加载到内存中,但我想弄清楚一个更好的方法。我遇到了 keras fit
我正在使用 Keras 训练神经网络。由于数据集的大小,我需要使用生成器和 fit_generator() 方法。我正在关注本教程: https://stanford.edu/~shervine/bl
我尝试使用 TensorFlow、Keras 和 ImageDataGenerator 从头开始创建一个模型,但它没有按预期进行。我仅使用生成器加载图像,因此不使用数据增强。有两个包含训练数据和测
我正在尝试调整 Keras MNIST Siamese example使用发电机。 关于example ,我们有: model.fit([tr_pairs[:, 0], tr_pairs[:, 1]]
我正在使用从文件读取数据的 fit_generator,当它到达文件末尾时,它会从下一个文件加载数据。我还在 keras 中使用有状态 RNN,因此我需要手动重置状态,在这种情况下,每次生成器加载新文
我正在尝试为我的 Keras lstm 模型编写一个生成器。将它与 fit_generator 方法一起使用。我的第一个问题是我的生成器应该返回什么?一批?序列?Keras 文档中的示例为每个数据条目
我有点困惑如何在 keras 中使用 fit_generator。 举例来说: 我们有 10000 个数据点 我们要运行 10 个 epoch 批量大小为 512 使用 fit 我们只是: x, y
我正在尝试为具有 3 个输入和一个处理文本数据的单个输出的模型实现自定义数据生成器,如下所示: # dummy model input_1 = Input(shape=(None,)) input_2
我有一个使用以下代码声明的 Keras 模型: model = tf.keras.models.Sequential() model.add(tf.keras.layers.LSTM(units=50
import os from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequenti
我在 keras 的 fit_generator 函数中使用的自定义生成器函数返回的 numpy 数组的形状方面遇到了一个看似简单的问题。 生成器函数与此类似: def data_generator(
我关注了this tutorial为我的 Keras 模型创建自定义生成器。这是一个显示我面临的问题的 MWE: import sys, keras import numpy as np import
上下文: 我目前正在使用带有 Tensorflow 后端的 Keras 进行时间序列预测,因此研究了提供的教程 here . 按照本教程,我来到了 fit_generator() 的生成器的位置。方法
我是一名优秀的程序员,十分优秀!