【问题标题】:How to training/testing without make all of the data float32 in Keras?如何在不使 Keras 中的所有数据 float32 的情况下进行训练/测试?
【发布时间】:2016-06-28 02:53:54
【问题描述】:

我正在尝试进行图像识别,所以我查看了the CIFAR10 Keras 的示例。

在将模型拟合到数据之前,需要将数据(X_train/X_test)归一化为 0-1 并转换为float32。当我使用像 CIFAR10 这样的小数据时,这没关系。但是当数据大小增加时,将数据转换为float32会消耗大量内存。我不想将所有数据转换为float32

这可以为 keras 中的每个小批量工作(将数据转换为 float32 并标准化)吗?

【问题讨论】:

    标签: python keras


    【解决方案1】:

    您可以进行一次转换,并将标准化、转换后的数据存储到您加载用于训练的文件中,这样您就不需要每次都进行转换。

    例如(normalize.py/python 3):

    from keras.datasets import cifar10
    import pickle
    
    (X_train, y_train), (X_test, y_test) = cifar10.load_data()
    
    X_train = X_train.astype('float32')
    X_test = X_test.astype('float32')
    X_train /= 255
    X_test /= 255
    
    with open('cifar10_normalized.pkl', 'wb') as f:
        pickle.dump(((X_train, y_train), (X_test, y_test)), f)
    

    在你的代码中(例如train.py)你可以这样做

    import pickle
    
    with open('cifar10_normalized.pkl', 'rb') as f:
        (X_train, y_train), (X_test, y_test) = pickle.load(f)
    

    另一种可能性是对每个批次进行标准化和转换。使用model.train_on_batch 运行单个批处理。例如:

    for (x_train,y_train) in yourData:
        x_train = x_train.astype(np.float32) / 255
        model.train_on_batch(x_train, y_train)
    

    最后你也可以use a python generator for training:

    def g():
        for (x_train,y_train) in yourData:
            x_train = x_train.astype(np.float32) / 255
            yield (x_train, y_train)
    model.fit_generator(g)
    

    【讨论】:

    • 感谢您的回答。在产量示例中,我确实将“yourData”的一部分更改为“(X_train,Y_train)”。使用 "model.fit_generator(g)" 函数时出现错误。我的方法错了吗?如果我在做荒谬,对不起。
    • yourData 类似于[(x1,y1),(x2,y2),(x3,y3)],而不是(X_train,Y_train)。这是基本的python,我帮不了你。
    猜你喜欢
    • 2020-06-09
    • 2018-08-26
    • 1970-01-01
    • 2019-10-14
    • 2018-04-22
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多