Python 当运行我的玩具示例时,Keras会失去记忆

Python 当运行我的玩具示例时,Keras会失去记忆,python,tensorflow,machine-learning,keras,memory-leaks,Python,Tensorflow,Machine Learning,Keras,Memory Leaks,在其他框架中工作了一段时间后,我正在学习Keras,我有以下代码示例: import keras.layers import keras.models import numpy as np from keras.optimizers import Adam import random import os import cv2 import tensorflow as tf TrainingDirectory="/home/thijser/host/ImageConverter/train

在其他框架中工作了一段时间后,我正在学习Keras,我有以下代码示例:

import keras.layers 
import keras.models 
import numpy as np
from keras.optimizers import Adam
import random 
import os
import cv2
import tensorflow as tf

TrainingDirectory="/home/thijser/host/ImageConverter/trainingdata" 
def main():
    model = define_feedforward_network1()
    compileModel(model)
    model.summary()
    train(model)

def define_feedforward_network1():
    inp = keras.engine.input_layer.Input(shape=(None,None,3))
    init = keras.initializers.RandomNormal(stddev=0.02)
    layer1=keras.layers.Conv2D(64, (4,4), activation='relu', padding='same', kernel_initializer=init)(inp)
    layer2 = keras.layers.Conv2D(128, (4,4), activation='relu', padding='same', kernel_initializer=init)(layer1)
    outp = keras.layers.Conv2D(3, (4,4), activation='relu', padding='same', kernel_initializer=init)(layer2)

    return keras.Model(input=inp,output=outp)


def compileModel(model):
    adam=keras.optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, amsgrad=False)
    model.compile(loss="mse", optimizer=adam,
    metrics=["mse"])

def train(model):
    model.fit_generator(mygenerator(),steps_per_epoch=100,epochs=16)


def mygenerator():

    batch_features=None
    batch_labels=None
    while True:
        target=random.choice(os.listdir(TrainingDirectory))
        batch_features=cv2.imread(TrainingDirectory+'/'+target+"/input.jpg", cv2.IMREAD_COLOR)
        batch_labels=cv2.imread(TrainingDirectory+'/'+target+"/labelcol.png", cv2.IMREAD_COLOR)
        yield np.array([batch_features]), np.array([batch_labels])

main()  
这是一个简单的神经网络,用于(在本例中)将彩色图像转换为灰度图像(只是为了对此有所了解)。可以通过将多个文件夹放入trainingDirectory文件夹,并将一个名为labelcol.png的图像和另一个input.jpg(与第一个相同大小)放入每个文件夹中来运行它

然而,当我运行它时,它会很快走出错误(就在进入训练的前16幅图像的末尾)。如果我打开报告_tensor _allocations _on _oom,我会得到一个segfault,因此它不会为我提供有用的信息,但是我可以看到内存使用量一次增加大约100-300 MB,这表明整个张量可能不会被释放


有人知道我做错了什么吗

您无法将所有训练图像加载到RAM中。您将需要构建一个定制的数据加载器,在训练循环中批量加载图像


这是一个很好的教程,对我帮助很大。

图像的大小是多少?您只使用Conv层,因此运行3000x3000x3图像,将在第一层之后生成3000x300x64,在第二层之后生成3000x300x128,依此类推。尝试将图像大小调整为200x200或类似的大小,看看这是否解决了您的问题mygenerator()函数是否已经解决了这个问题?