代码之家  ›  专栏  ›  技术社区  ›  lo tolmencre

keras可视化工具包thriting`<layer>input:0既被输入又被获取。`for simple`sequential` model

  •  0
  • lo tolmencre  · 技术社区  · 5 年前

    我正在尝试从 Keras Visualization Toolkit 去跑步。

    我的测试代码是:

    # 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.
    

    有很多帖子都有这个错误。但到目前为止,我还不知道问题出在哪里。我想这和模型定义有关。但这是一种非常普通的模式。所以,我看不出有什么问题。

    知道吗?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Dr. Snoopy    5 年前

    问题是 keras-vis 最新版本是从2017年开始的(PYPI上提供的版本),所以如果您使用PIP安装它,您将无法获得GitHub上提供的固定版本。解决方案非常简单,请删除已安装的当前版本,然后从GitHub安装:

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

    有关此的详细信息 issue .