Python 在tflearn中可视化CNN层或池层

Python 在tflearn中可视化CNN层或池层,python,visualization,tflearn,Python,Visualization,Tflearn,在tflearn中进行培训甚至测试时,是否有任何方法可以可视化CNN或池层的输出?我看过tensorflow的可视化代码,但由于session和feeddict都涉及到它们,我不断得到错误,如“unhable numpy.ndarray”,但我的图像尺寸相同,因此我决定询问是否有一种方法可以可视化任何层的输出。下面是我的tflearn层代码:- X_train, X_test, y_train, y_test=cross_validation.train_test_split(data,labe

在tflearn中进行培训甚至测试时,是否有任何方法可以可视化CNN或池层的输出?我看过tensorflow的可视化代码,但由于session和feeddict都涉及到它们,我不断得到错误,如“unhable numpy.ndarray”,但我的图像尺寸相同,因此我决定询问是否有一种方法可以可视化任何层的输出。下面是我的tflearn层代码:-

X_train, X_test, y_train, y_test=cross_validation.train_test_split(data,labels,test_size=0.1)

    tf.reset_default_graph()
    convnet=input_data(shape=[None,50,50,3],name='input')
    convnet=conv_2d(convnet,32,5,activation='relu')
    convnet=max_pool_2d(convnet,5)
    convnet=conv_2d(convnet,64,5,activation='relu')
    convnet=max_pool_2d(convnet,5)

    convnet=conv_2d(convnet,32,5,activation='relu')
    convnet=max_pool_2d(convnet,5)

    convnet=fully_connected(convnet,128,activation='relu')
    convnet=dropout(convnet,0.4)
    convnet=fully_connected(convnet,6,activation='softmax')
    convnet=regression(convnet,optimizer='adam',learning_rate=0.005,loss='categorical_crossentropy',name='MyClassifier')
    model=tflearn.DNN(convnet,tensorboard_dir='log',tensorboard_verbose=0)
    model.fit(X_train,y_train, n_epoch=20,validation_set=(X_test,y_test), snapshot_step=20,show_metric=True,run_id='MyClassifier')
    print("Saving the model")
    model.save('model.tflearn')
在培训或测试工作正常时,如何可视化任何层的输出?我所说的输出是指检测边缘或其他低级特征的失真图像。谢谢。

如前所述,只需定义一个新模型,将观察到的层作为输出,就可以看到中间层产生的输出。 首先,声明原始模型(但保留对要观察的中间层的引用):

convnet=input\u数据(shape=[None,50,50,3],name='input')
convnet=conv_2d(convnet,32,5,activation='relu')
max_0=max_pool_2d(convnet,5)
convnet=conv_2d(最大值为0,64,5,激活=relu')
max_1=max_pool_2d(convnet,5)
...
convnet=回归(…)
model=tflearn.DNN(…)
模型拟合(…)
现在只需为每个层创建一个模型,并预测输入数据:

observed=[max_0,max_1,max_2]
observers=[tflearn.DNN(v,session=model.session)表示观察到的v]
输出=[m.predict(X_测试)针对观察者中的m]
打印([d.shape用于输出中的d])
它为您的模型输出以下已计算的张量形状:

[(2,10,10,32),(2,2,2,64),(2,1,1,32)]

有了它,您将能够在测试期间查看输出。至于训练,也许你可以用回拨电话

class PlottingCallback(tflearn.callbacks.Callback):
定义初始化(self,model,x,
层_至_观察=(),
内核=10,
输入=1):
self.model=model
self.x=x
self.kernels=内核
self.inputs=输入
self.observators=[tflearn.DNN(l)表示层中的l\u-to\u-observe]
def在终端(自我、训练状态):
输出=[o.predict(self.x)对于self.observators中的o]
对于范围内的i(自输入):
plt.图(frameon=False)
plt.子批次调整(wspace=0.1,hspace=0.1)
ix=1
对于输出中的o:
对于范围内的内核(self.kernels):
plt.子批(len(输出)、self.kernels、ix)
imshow(o[i,:,:,内核])
打印轴(“关闭”)
ix+=1
plt.savefig('图像输出:%i-at-epoch:%i.png'
%(一、培训(国家纪元))
模型安装(X_系列、y_系列、,
...
回调=[PlottingCallback(模型,X_测试,(最大值0,最大值1,最大值2))]
这将在每个历元将类似的图像保存到磁盘上:


你为什么不能设置
tensorboard\u verbose=3
并通过tensorboard查看图层的“激活”直方图?对不起,我真的不知道tensorboard\u verbose=3,但我是否可以将它们输入plt或任何其他图形函数,并获得CNN用于预测的扭曲图像?好吗我检查了它,甚至用它来测试加载的模型,它只是显示了曲线和所有,我应该用它来再次训练模型以查看输出吗?很好的解释,只是一个愚蠢的问题,当我得到张量的输出形状时,我如何绘制它并看到它。我不能在一个简单的matplot的plt函数上做这个,你能帮我吗?我在做回调训练“raise TypeError('Tensor'对象不可iterable.”)时也遇到了这个错误。它在这行“self.observators=[tflearn.DNN(l)for l in layers\u to\u observe]”我只传递了max_0作为参数。您只需要选择一个映像和一个内核,然后使用
plt.imshow(输出[image,:,:,kernel)绘制它
。按照我在
PlottingCallback
中编写的代码进行操作。至于您的错误,这是因为回调需要观察一个层列表,而您只传递一个。请注意
(max\u 0)
不是一个元素的元组,而是
(max\u 0,)
is。当我给它另一个max_1层时,上面提到的错误已经解决了,现在我在回调函数的某个地方得到了这个错误“TypeError:“NoneType”对象不可调用。我需要更多的信息。这到底是在哪里提出的?