从 sklearn 的 MLPClassifier 中检索最终的隐藏激活层输出
Retrieve final hidden activation layer output from sklearn's MLPClassifier
我想在 fit
调整数据后使用 sklearn 的 MLPClassifier
对神经网络最终隐藏激活层输出进行一些测试。
例如,如果我创建一个分类器,假设数据 X_train
带有标签 y_train
和两个大小为 (300,100)
的隐藏层
clf = MLPClassifier(hidden_layer_sizes=(300,100))
clf.fit(X_train,y_train)
我希望能够以某种方式调用一个函数来检索长度为 100
的最终隐藏激活层向量,以用于其他测试。
假设测试集 X_test, y_test
,正常预测为:
preds = clf.predict(X_test)
但是,我想做类似的事情:
activation_layers_for_all_X_test = clf.get_final_activation_output(X_test)
get_weights
等函数存在,但这只会在每层的基础上帮助我。除了自己进行转换之外,还有其他方法可以为最终隐藏层检索这些最终隐藏层激活输出吗?
以这张图为例:
我想要的输出是Out Layer
,即最终隐藏层的最终激活输出。
正如我在上面的评论中所说,在 sklearn
中似乎没有一个函数可以完全按照您的意愿执行操作,但您可以很容易地破解 _predict
函数来实现它做你想做的事。以下代码将 return 所有激活,您可以将其编辑为 return activations[-2]
只是您想要的部分。
def get_activations(clf, X):
hidden_layer_sizes = clf.hidden_layer_sizes
if not hasattr(hidden_layer_sizes, "__iter__"):
hidden_layer_sizes = [hidden_layer_sizes]
hidden_layer_sizes = list(hidden_layer_sizes)
layer_units = [X.shape[1]] + hidden_layer_sizes + \
[clf.n_outputs_]
activations = [X]
for i in range(clf.n_layers_ - 1):
activations.append(np.empty((X.shape[0],
layer_units[i + 1])))
clf._forward_pass(activations)
return activations
我想在 fit
调整数据后使用 sklearn 的 MLPClassifier
对神经网络最终隐藏激活层输出进行一些测试。
例如,如果我创建一个分类器,假设数据 X_train
带有标签 y_train
和两个大小为 (300,100)
clf = MLPClassifier(hidden_layer_sizes=(300,100))
clf.fit(X_train,y_train)
我希望能够以某种方式调用一个函数来检索长度为 100
的最终隐藏激活层向量,以用于其他测试。
假设测试集 X_test, y_test
,正常预测为:
preds = clf.predict(X_test)
但是,我想做类似的事情:
activation_layers_for_all_X_test = clf.get_final_activation_output(X_test)
get_weights
等函数存在,但这只会在每层的基础上帮助我。除了自己进行转换之外,还有其他方法可以为最终隐藏层检索这些最终隐藏层激活输出吗?
以这张图为例:
我想要的输出是Out Layer
,即最终隐藏层的最终激活输出。
正如我在上面的评论中所说,在 sklearn
中似乎没有一个函数可以完全按照您的意愿执行操作,但您可以很容易地破解 _predict
函数来实现它做你想做的事。以下代码将 return 所有激活,您可以将其编辑为 return activations[-2]
只是您想要的部分。
def get_activations(clf, X):
hidden_layer_sizes = clf.hidden_layer_sizes
if not hasattr(hidden_layer_sizes, "__iter__"):
hidden_layer_sizes = [hidden_layer_sizes]
hidden_layer_sizes = list(hidden_layer_sizes)
layer_units = [X.shape[1]] + hidden_layer_sizes + \
[clf.n_outputs_]
activations = [X]
for i in range(clf.n_layers_ - 1):
activations.append(np.empty((X.shape[0],
layer_units[i + 1])))
clf._forward_pass(activations)
return activations