我尝试通过解决xor问题来创建感知器输出的热图,但是
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)
答案 0 :(得分:1)
问题是您为单个向量调用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()