我有一个声明为以下代码的Keras模型:
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.LSTM(units=50, activation="tanh", return_sequences=False, input_shape=(settings["past_size"], len(indicators_used))))
model.add(tf.keras.layers.Dense(3, activation="softmax"))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit_generator(
generator=batch_generator(train_x, train_y),
steps_per_epoch=n_batches_per_epoch,
epochs=settings["epochs"],
workers=5,
use_multiprocessing=True,
max_queue_size=10000)
我尝试了workers
,use_multiprocessing
和max_queue_size
设置,但无济于事。输入形状为(100000, 500, 27)
。
批处理生成器函数如下所示:
def batch_generator(x, y):
while True:
for i in range(n_batches_per_epoch):
x_train = []
y_train = []
for j in range(settings["past_size"] + settings["batch_size"] * i, settings["past_size"] + (settings["batch_size"] * (i + 1))):
x_train.append(x.iloc[j - past_size:j].to_numpy())
y_train.append(y.iloc[j].to_numpy())
return_x, return_y = np.array(x_train), np.array(y_train)
yield return_x, return_y
执行时间:
767ms/step
1s/step
2s/step
我现在面临的问题是Keras培训过程非常缓慢。一个纪元大约需要45分钟。我无法使用,model.fit()
因为数据对于RAM而言太大。
我对batch_generator功能的理解是,该功能可以准备批并将其加载到GPU / TPU上,但事实并非如此。此代码与TPU运行时一起在Google Colab中运行。
在Google colab环境中,您需要将模型显式转换为TPU兼容版本。这是我上次与Google Colab合作时的错误。
TPU_WORKER = 'grpc://' + os.environ['COLAB_TPU_ADDR']
tpu_model = tf.contrib.tpu.keras_to_tpu_model(
model,
strategy=tf.contrib.tpu.TPUDistributionStrategy(
tf.contrib.cluster_resolver.TPUClusterResolver(TPU_WORKER)))
tpu_model
具有与相同的界面model
。
指南:https://medium.com/tensorflow/tf-keras-on-tpus-on-colab-674367932aa0
不幸的是,这似乎不适用于Sequential
api。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句