使用张量流训练大量独立的神经网络

时间:2018-11-27 16:33:18

标签: python tensorflow keras

我有一个需要训练大量独立NN的设置。它们都共享相同的体系结构,但是每个的训练和测试数据都不同。我发现的问题是RAM使用量增加,而性能却很快下降。问:如何以有效且可扩展的方式做到这一点?

我尝试了一种简单的方法:

for i in range(1000):
    # Create NN
    model = keras.Sequential(...)
    optimizer = keras.optimizers.Adam()
    model.compile(loss=loss, optimizer=optimizer, metrics=metrics)

    # Train and test
    Xtrain, ytrain, Xtest, ytest = loadData(i)
    history = model.fit(XTrain, yTrain, epochs=epochs, validation_data=(Xtest, ytest))

    # Save data
    allHistory.append(history)

然后尝试重用单个NN,重置权重并进行训练:

# Create NN
model = keras.Sequential(...)
optimizer = keras.optimizers.Adam()
model.compile(loss=loss, optimizer=optimizer, metrics=metrics)
# Save fresh model
model.save(savePath)

for i in range(1000):
    # Load fresh model
    model = keras.models.load_model(savePath)

    # Train and test
    Xtrain, ytrain, Xtest, ytest = loadData(i)
    history = model.fit(XTrain, yTrain, epochs=epochs, validation_data=(Xtest, ytest))

    # Save data
    allHistory.append(history)

在这两种情况下,性能和RAM的使用似乎相似,因此我认为TensorFlow在每次迭代中都在不断增长其图形。

1 个答案:

答案 0 :(得分:0)

也许您可以使用import thread并在自己的线程中训练每个NN。这应该行得通,因为多线程可使操作顺序化,并有助于改善其可伸缩性。

我认为您将获得良好的结果

for i in range(0,1000,5):
    t1 = Thread(target=NN, args=arguments(i+1))
    ...
    t5 = Thread(target=NN, args=arguments(i+5))
    t1.start()
    t1.join()
    ...
    t5.start()
    t5.join()