Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用Keras模型可视化小区决策边界_Python_Keras - Fatal编程技术网

Python 用Keras模型可视化小区决策边界

Python 用Keras模型可视化小区决策边界,python,keras,Python,Keras,我试图通过Keras绘制模型预测的决策图边界。但是,生成的边界似乎不正确 这是我的模型 def base(): model = Sequential() model.add(Dense(5,activation = 'relu', input_dim = 2)) model.add(Dense(2,activation = 'relu')) model.add(Dense(1,activation = 'sigmoid')) model.compile(o

我试图通过Keras绘制模型预测的决策图边界。但是,生成的边界似乎不正确

这是我的模型

def base():
    model = Sequential()
    model.add(Dense(5,activation = 'relu', input_dim = 2))
    model.add(Dense(2,activation = 'relu'))
    model.add(Dense(1,activation = 'sigmoid'))
    model.compile(optimizer = optimizers.SGD(lr=0.0007, momentum=0.0, decay=0.0), loss = 'binary_crossentropy', metrics= ['accuracy'])      
    return model 

model = base()
history = model.fit(train_X,train_Y, epochs = 10000, batch_size =64, verbose = 2)
这是我的绘图函数(取自)

我得到了这样一个情节


这显然是对情节决策边界的一种非常有缺陷的描述(由于存在如此多的边界,因此根本没有提供任何信息)。有人能指出我的例子中的错误吗?

因为概率是从0到1的连续值,所以我们得到了许多轮廓

如果可视化仅限于2个类(输出为2D softmax vector),则可以使用此简单代码

def plotModelOut(x,y,model):
  '''
  x,y: 2D MeshGrid input
  model: Keras Model API Object
  '''
  grid = np.stack((x,y))
  grid = grid.T.reshape(-1,2)
  outs = model.predict(grid)
  y1 = outs.T[0].reshape(x.shape[0],x.shape[0])
  plt.contourf(x,y,y1)
  plt.show()
这将给出轮廓(不止一条),如果您想要一条轮廓线,可以执行以下操作

您可以设置
模型的概率输出阈值。预测
并显示一条等高线

比如说,

import numpy as np 
from matplotlib import pyplot as plt 

a = np.linspace(-5, 5, 100)
xx, yy = np.meshgrid(a,a)
z = xx**2 + yy**2
# z = z > 5 (Threshold value)
plt.contourf(xx, yy, z,)
plt.show()
通过阈值注释和未注释,我们得到2幅图像

连续值导致的多个轮廓

z设定阈值时的单个轮廓(z=z>5)

类似的方法可用于输出softmax向量,如下所示

label=label>0.5

有关可视化代码的更多信息,请参阅

import numpy as np 
from matplotlib import pyplot as plt 

a = np.linspace(-5, 5, 100)
xx, yy = np.meshgrid(a,a)
z = xx**2 + yy**2
# z = z > 5 (Threshold value)
plt.contourf(xx, yy, z,)
plt.show()