首页 > 解决方案 > keras model.predict() 很慢

问题描述

我尝试通过解决异或问题来创建感知器输出的热图,但是

model.predict (np.array ([[i / 255, i2 / 255]]))

生成地图需要很长时间。我怎样才能更快地运行它?

生成模型的代码

from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD
import numpy as np 
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD
import numpy as np 

#X son los datos de entrada
#y son la salida correpondiente a cada entrada
X = np.array([[0,0],[0,1],[1,0],[1,1]])
y = np.array([[0],[1],[1],[0]])

model = Sequential()
model.add(Dense(8, input_dim=2))
model.add(Activation('tanh'))
model.add(Dense(1))
model.add(Activation('sigmoid'))

sgd = SGD(lr=0.1)
model.compile(loss='binary_crossentropy', optimizer=sgd)

model.fit(X, y, batch_size=1, nb_epoch=1000)

为问题 xor 绘制输出热图的代码

from PIL import Image

img = Image.new('RGB', (320, 280))
pixels = img.load()
for i2 in range(255):
    for i in range(255):
       g=model.predict(np.array([[i/255,i2/255]]))
       pixels[i,i2] = (0,g*255,0)
plt.imshow(img)

标签: pythonkeras

解决方案


问题是您model.predict()为单个向量调用了 65536 次。这是相当低效的。预先计算输入向量,然后只运行一次预测。在我的机器上需要 2 秒。

x = np.linspace(0,1,256)
img = list()
for i in range(256):
    for j in range(256):
        img.append([x[j],x[i]])
pred=model.predict(np.array(img),verbose=1)
plt.imshow(pred.reshape((256,256)))
plt.colorbar()
plt.show()

推荐阅读