我试图从Keras可视化工具包开始运行示例。

我的测试代码是这样的:

# simple CNN definition
from keras.models import Sequential
from keras.layers import Dense, Conv1D, Flatten
#create model
model = Sequential()
#add model layers
model.add(Conv1D(1000, kernel_size=3, activation='relu', input_shape=(28,3)))
model.add(Conv1D(50, name='conv1D_2', kernel_size=3, activation='relu'))
model.add(Flatten())
model.add(Dense(10, activation='softmax'))

# code from github page
from vis.losses import ActivationMaximization
from vis.regularizers import TotalVariation, LPNorm

filter_indices = [1, 2, 3]

# Tuple consists of (loss_function, weight)
# Add regularizers as needed.
losses = [
    (ActivationMaximization(model.layers[1], filter_indices), 1),
#     (LPNorm(model.input[1:]), 10),
#     (TotalVariation(model.input), 10)
]

from vis.optimizer import Optimizer

optimizer = Optimizer(model.input, losses)
opt_img, grads, _ = optimizer.minimize()

我收到以下错误:

---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-38-eb157373ee04> in <module>
     15 
     16 optimizer = Optimizer(model.input, losses)
---> 17 opt_img, grads, _ = optimizer.minimize()

~/anaconda3/envs/ccnn2/lib/python3.7/site-packages/vis/optimizer.py in minimize(self, seed_input, max_iter, input_modifiers, grad_modifier, callbacks, verbose)
    141         best_loss = float('inf')
    142         best_input = None
--> 143 
    144         grads = None
    145         wrt_value = None

~/anaconda3/envs/ccnn2/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py in __call__(self, inputs)
   2713                 return self._legacy_call(inputs)
   2714 
-> 2715             return self._call(inputs)
   2716         else:
   2717             if py_any(is_tensor(x) for x in inputs):

~/anaconda3/envs/ccnn2/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py in _call(self, inputs)
   2669                                 feed_symbols,
   2670                                 symbol_vals,
-> 2671                                 session)
   2672         if self.run_metadata:
   2673             fetched = self._callable_fn(*array_vals, run_metadata=self.run_metadata)

~/anaconda3/envs/ccnn2/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py in _make_callable(self, feed_arrays, feed_symbols, symbol_vals, session)
   2621             callable_opts.run_options.CopyFrom(self.run_options)
   2622         # Create callable.
-> 2623         callable_fn = session._make_callable_from_options(callable_opts)
   2624         # Cache parameters corresponding to the generated callable, so that
   2625         # we can detect future mismatches and refresh the callable.

~/anaconda3/envs/ccnn2/lib/python3.7/site-packages/tensorflow/python/client/session.py in _make_callable_from_options(self, callable_options)
   1469     """
   1470     self._extend_graph()
-> 1471     return BaseSession._Callable(self, callable_options)
   1472 
   1473 

~/anaconda3/envs/ccnn2/lib/python3.7/site-packages/tensorflow/python/client/session.py in __init__(self, session, callable_options)
   1423         with errors.raise_exception_on_not_ok_status() as status:
   1424           self._handle = tf_session.TF_SessionMakeCallable(
-> 1425               session._session, options_ptr, status)
   1426       finally:
   1427         tf_session.TF_DeleteBuffer(options_ptr)

~/anaconda3/envs/ccnn2/lib/python3.7/site-packages/tensorflow/python/framework/errors_impl.py in __exit__(self, type_arg, value_arg, traceback_arg)
    526             None, None,
    527             compat.as_text(c_api.TF_Message(self.status.status)),
--> 528             c_api.TF_GetCode(self.status.status))
    529     # Delete the underlying status object from memory otherwise it stays alive
    530     # as there is a reference to status from this from the traceback due to

InvalidArgumentError: conv1d_2_input:0 is both fed and fetched.

这个错误有很多帖子。到目前为止,我无法弄清楚问题是什么。我想这与模型定义有关。但这是一种非常普遍的模式。所以,我没有看到问题。

任何的想法?

分析解答

好吧问题是keras-vis最新版本是2017年(PyPI版本),所以如果你使用pip安装它,你将无法获得github上提供的固定版本。解决方案非常简单,删除已安装的当前版本并从github安装一个:

pip uninstall keras-vis
pip install --user git+https://github.com/raghakot/keras-vis.git

有关此问题的更多信息。