Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何正确实施Keras';s fit_生成器在多个数据集上?_Python_Tensorflow_Keras_Batch Processing_Conv Neural Network - Fatal编程技术网

Python 如何正确实施Keras';s fit_生成器在多个数据集上?

Python 如何正确实施Keras';s fit_生成器在多个数据集上?,python,tensorflow,keras,batch-processing,conv-neural-network,Python,Tensorflow,Keras,Batch Processing,Conv Neural Network,我在实现Keras的fit_生成器函数时遇到问题。我关注了Keras文档和许多其他在线文档。但我似乎无法让这件事起作用 当我运行fit_生成器时,它没有抛出错误。我可以看出,由于我在任务管理器上的GPU使用率飙升至70%的处理率,后台正在运行一些东西。但是,没有任何文字/详细信息表明批次正在为我的卷积神经网络进行处理 这是我的模型 这是我的批处理生成器 我有六个hdf5文件,每个文件都包含40000个图像。它们已经格式化为Numpy数组。我每次生产20个批量 def train_generato

我在实现Keras的fit_生成器函数时遇到问题。我关注了Keras文档和许多其他在线文档。但我似乎无法让这件事起作用

当我运行fit_生成器时,它没有抛出错误。我可以看出,由于我在任务管理器上的GPU使用率飙升至70%的处理率,后台正在运行一些东西。但是,没有任何文字/详细信息表明批次正在为我的卷积神经网络进行处理

这是我的模型 这是我的批处理生成器 我有六个hdf5文件,每个文件都包含40000个图像。它们已经格式化为Numpy数组。我每次生产20个批量

def train_generator():
    counter = 1
    batch_size = 20

    while True:

        # Create arrays to contain x_train and y_train. There are six of these files in total, so 40000*6 = 240,000 items in the entire training set.
        # 240,000 images for each epoch
        h5f = h5py.File('x_train' + str(counter) + 'catID.h5','r')
        pic_arr = h5f['dataset'][0:40000]

        h5f = h5py.File('y_train' + str(counter) + 'catID.h5','r')
        cat_arr = h5f['dataset'][0:40000]
        h5f.close()

        # Since training size for first dataset is 40,000 and batch_size is 20, loop 2000 times because 40000/20 = 2000 
        for i in range(1,2001):
            if (i == 1):
                x_train = pic_arr[0:batch_size]
                y_train = cat_arr[0:batch_size]

                index = batch_size
                yield (x_train, y_train)
            else:
                x_train = pic_arr[index:index + batch_size]
                y_train = cat_arr[index:index + batch_size]

                index += batch_size
                yield (x_train, y_train)

        del pic_arr
        del cat_arr
        counter += 1
适合我的模型 当我的模型与我的生成器相匹配时,我知道我的GPU正在处理数据;我有一台NVIDIA GTX 1070。但在运行下面的代码时,不会显示详细/文本。我也试过不用GPU跑步,但还是没有运气。我有什么地方做错了吗

from keras.callbacks import ModelCheckpoint
import tensorflow as tf

# This is used to store the best weights for our trained model.
checkpointer = ModelCheckpoint(filepath='weights_bestcatID.hdf5', 
                           verbose=1, save_best_only=True)

# steps_per_epoch=12000 because --> 240,000 (total samples) / 20 (batch size) = 12000 
with tf.device('/device:GPU:0'):
    model.fit_generator(train_generator(), steps_per_epoch=12000, nb_epoch=4, verbose = 1, callbacks=[checkpointer])

别客气。我试着再次运行同样的代码,它成功了。。。如果有人需要参考如何实现Keras的fit_generator,上面的方法是有效的。

只需删除收益率语句中的括号。当计数器>文件数时会发生什么情况?
from keras.callbacks import ModelCheckpoint
import tensorflow as tf

# This is used to store the best weights for our trained model.
checkpointer = ModelCheckpoint(filepath='weights_bestcatID.hdf5', 
                           verbose=1, save_best_only=True)

# steps_per_epoch=12000 because --> 240,000 (total samples) / 20 (batch size) = 12000 
with tf.device('/device:GPU:0'):
    model.fit_generator(train_generator(), steps_per_epoch=12000, nb_epoch=4, verbose = 1, callbacks=[checkpointer])