Python 理解神经网络中哪些输入具有最高权重

Python 理解神经网络中哪些输入具有最高权重,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,我目前正在研究一个有监督的机器学习解决方案,将一些数据分为两类。 到目前为止,我已经开发了keras/tensorflow Python Scipt,它似乎可以很好地处理这一问题: input_dim = len(data.columns) - 1 print(input_dim) model = Sequential() model.add(Dense(8, input_dim=input_dim, activation='relu')) model.add(Dense(10, activa

我目前正在研究一个有监督的机器学习解决方案,将一些数据分为两类。 到目前为止,我已经开发了keras/tensorflow Python Scipt,它似乎可以很好地处理这一问题:

input_dim = len(data.columns) - 1
print(input_dim)

model = Sequential()
model.add(Dense(8, input_dim=input_dim, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(2, activation='softmax'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(train_x, train_y, validation_split=0.33, epochs=1500, batch_size=1000, verbose=1)
我使用的输入数据是具有168个输入特性的csv数据。当我第一次成功地运行这个脚本时,我非常惊讶地看到,在经过几百次的训练之后,我实际上获得了99%以上的准确率。我甚至还没有对输入数据进行标准化

我现在想弄清楚的是,在我的168个输入功能中,哪一个是如此高的准确率的原因,哪一个功能在训练时不会产生太大的影响


是否有办法检查每个输入列的权重,以查看其中哪个使用最多,哪个影响最大。

回答您的最后一个问题:

model.layers[0].get_weights()
然而,除非有明显的主导权重,否则单个样本不太可能提供良好的准确性。对于特征选择,请尝试将输入的某些特征替换为它们的平均值,并检查预测如何波动。几乎没有波动意味着特征不重要


也请考虑在

< P>上回答ML问题,回答你的最后一个问题:

model.layers[0].get_weights()
然而,除非有明显的主导权重,否则单个样本不太可能提供良好的准确性。对于特征选择,请尝试将输入的某些特征替换为它们的平均值,并检查预测如何波动。几乎没有波动意味着特征不重要


也请考虑在

< P>上发表ML问题,从第一层到每个神经元都会有一个连接。关于使用权重查找列的相对重要性,您可以采用两种方法(除了随机化或删除(相当于用上面答案中建议的平均值替换)之外)。请记住,只有在您输入标准化数据集时,这些方法才有意义

  • 您可以使用第一层中每个列的
    L1
    L2
    标准权重
  • 假设您的输入有100列。创建一个层,该层将输入与大小为(100,)的张量(可训练)进行点积。现在,将该层的输出输入到顺序模型中。你训练的(100,)张量是你的列的相对重要性

  • 从每一个“列”到第一层的每一个神经元都有一个连接。关于使用权重查找列的相对重要性,您可以采用两种方法(除了随机化或删除(相当于用上面答案中建议的平均值替换)之外)。请记住,只有在您输入标准化数据集时,这些方法才有意义

  • 您可以使用第一层中每个列的
    L1
    L2
    标准权重
  • 假设您的输入有100列。创建一个层,该层将输入与大小为(100,)的张量(可训练)进行点积。现在,将该层的输出输入到顺序模型中。你训练的(100,)张量是你的列的相对重要性

  • 你能进一步解释一下L1和L2的意思吗?你对图层感兴趣吗?对于第二种方法,您建议在输入层之后放置一个层,其大小等于我的输入数?你能提供一个简短的代码示例吗?谢谢你能进一步解释一下L1和L2的意思吗?你对图层感兴趣吗?对于第二种方法,您建议在输入层之后放置一个层,其大小等于我的输入数?你能提供一个简短的代码示例吗?谢谢你的回答。这会给我每个输入特征的输入层的权重?由于我有168个功能开始,这将需要很多时间来观察变化的准确性单独为每个功能。因此,我会从一小部分输入权重最高的功能开始,然后根据排名开始添加更多功能,看看准确性如何变化。。。你认为这样行吗?我在文献中见过这种方法,为什么不呢?好的,我想说清楚。我已经这样做了,现在我得到了168个输入列中每个列的8个权重。8个权重,因为下一层(第1层)的大小为8,每个列与该层中的每个神经元有8个连接。现在,您建议计算这些权重的平均值以进行比较?或者把它们加起来会更有意义吗?给定节点之外的所有权重的震级平均值或震级总和——它们是等价的。这对你的选择没有影响——要计算平均值,你要把每个这样的总和除以8。它不会改变相对顺序。我还将关注每个节点的最大权重…感谢您的回答。这会给我每个输入特征的输入层的权重?由于我有168个功能开始,这将需要很多时间来观察变化的准确性单独为每个功能。因此,我会从一小部分输入权重最高的功能开始,然后根据排名开始添加更多功能,看看准确性如何变化。。。你认为这样行吗?我在文献中见过这种方法,为什么不呢?好的,我想说清楚。我已经这样做了,现在我得到了168个输入列中每个列的8个权重。8个权重,因为下一层(第1层)的大小为8,每个列与该层中的每个神经元有8个连接。现在,您建议计算这些权重的平均值以进行比较?或者把它们加起来会更有意义吗?给定节点之外的所有权重的震级平均值或震级总和——它们是等价的。这对你的选择没有影响——要计算平均值,你要把每个这样的总和除以8。它不会改变相对顺序。我也会保持沉默