【发布时间】:2018-07-25 13:59:25
【问题描述】:
我正在研究使用 Keras 和 Tensorflow 实现的强化学习模型。我必须在单个输入上频繁调用 model.predict()。
在一个简单的预训练模型上测试推理时,我注意到使用 Keras 的 model.predict 比仅在存储的权重上使用 Numpy 慢得多。为什么这么慢,我该如何加速?对于复杂的模型,使用纯 Numpy 是不可行的。
import timeit
import numpy as np
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense
w = np.array([[-1., 1., 0., 0.], [0., 0., -1., 1.]]).T
b = np.array([ 15., -15., -21., 21.])
model = Sequential()
model.add(Dense(4, input_dim=2, activation='linear'))
model.layers[0].set_weights([w.T, b])
model.compile(loss='mse', optimizer='adam')
state = np.array([-23.5, 17.8])
def predict_very_slow():
return model.predict(state[np.newaxis])[0]
def predict_slow():
ws = model.layers[0].get_weights()
return np.matmul(ws[0].T, state) + ws[1]
def predict_fast():
return np.matmul(w, state) + b
print(
timeit.timeit(predict_very_slow, number=10000),
timeit.timeit(predict_slow, number=10000),
timeit.timeit(predict_fast, number=10000)
)
# 5.168972805004538 1.6963867129435828 0.021918574168087623
# 5.461319456664639 1.5491559107269515 0.021502970783442876
【问题讨论】:
-
您能提供您的模型定义吗?
-
一个有趣的见解。请提供有关您的训练/推理以及模型定义的更多信息(可能是更多代码?)。
-
如果我在一个10000行的数组上使用model.predict() 1次,大约需要0.1秒。
-
您使用的是 GPU 吗?
-
@MatiasValdenegro 不,我只使用 CPU。
标签: python numpy tensorflow keras