我试图从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
有关此问题的更多信息。