我想将我的keras模型转换为theano函数,以便我可以计算输入的渐变。我认为这对于可视化网络来说可能很酷。我想使用这些渐变来增强原始图像中基于神经网络认为的特征。我不明白以下代码我做错了什么。
model = Sequential()
model.add(InputLayer((3, H, W)))
model.add(GaussianNoise(0.03))
model.add(Flatten())
model.add(Dense(512, activation = 'relu', name = 'dense'))
model.add(Dropout(0.2))
model.add(Dense(20, activation = 'relu'))
model.add(Dense(C, activation = 'softmax', W_regularizer = l2()))
...
f = theano.function([model.input], model.output)
我收到以下异常。
theano.gof.fg.MissingInputError: A variable that is an input to the graph was neither provided as an input to the function nor given a value. A chain of variables leading from this input to an output is [keras_learning_phase, DimShuffle{x,x}.0, Elemwise{switch,no_inplace}.0, dot.0, Elemwise{add,no_inplace}.0, Elemwise{add,no_inplace}.0, Elemwise{mul,no_inplace}.0, dot.0, Elemwise{add,no_inplace}.0, Softmax.0]. This chain may not be unique
Backtrace when the variable is created:
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "/usr/local/lib/python3.5/dist-packages/keras/backend/__init__.py", line 51, in <module>
from .theano_backend import *
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 662, in exec_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "/usr/local/lib/python3.5/dist-packages/keras/backend/theano_backend.py", line 13, in <module>
_LEARNING_PHASE = T.scalar(dtype='uint8', name='keras_learning_phase') # 0 = test, 1 = train
答案 0 :(得分:2)
在FAQ之后,尝试:
from keras import backend as K
get_last_layer_output = K.function([model.layers[0].input],
[model.layers[-1].output])
对于最新版本的Keras(1.0),请使用
from keras import backend as K
get_last_layer_output = K.function([model.layers[0].input],
[model.layers[-1].get_output(train=False)])
答案 1 :(得分:0)