python - 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)
解决方案
问题是您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()
推荐阅读
- symfony5 - Symfony 5.0 LiipFunctionalTestBundle Form 必须是 Client 的实例而不是 KernelBrowser
- python - Django 模型和模板连接
- php - Laravel Homestead 中的引导程序
- css - 为什么@font-face 不能正常工作?
- scala - 将迭代器转换为重复块的迭代器
- git - 在 git bash 中:“错误:refs/tags/prod--release--371 未指向有效对象!” - 如何解决?
- python - 将一行(文件)中的多个字符串与其他文件中的单个字符串相同的行号进行比较
- javascript - 在 JS 中如何最好地向对象文字添加属性?
- reactjs - 在 HoC 中调用 React Hook
- c++ - 如何用 2 个对象覆盖运算符