我正在尝试构建一个用于恶意检测的对抗样本模型,但遇到了错误
尝试使用未初始化的值dense_24/bias
即使我将所有变量初始化为全局变量,并考虑了会话。这里是完整的代码
with tf.Session() as sess: sess.run(tf.global_variables_initializer()) tf.set_random_seed(42) def mlp_model (): model_adv = Sequential() model_adv.add(Dense (256, activation ='relu', input_shape =(X_train.shape[1],))) model_adv.add(Dropout(0.4)) model_adv.add(Dense(256, activation ='relu')) model_adv.add(Dropout(0.4)) model_adv.add(Dense(2, activation ='softmax')) model_adv.compile(loss ='categorical_crossentropy', optimizer ='adam', metrics = ['accuracy']) model_adv.summary() return model_adv model_adv = mlp_model() source_samples = X_test.shape[0] X_adv = np.empty((0,36)) #numpy.empty(shape, dtype = float, order = ‘C’) : Return a new array of given shape and type, with random values.generating empty array with shape same as X_test data jsma = SaliencyMapMethod(model_adv, back = 'tf', sess = sess) #initializing object for saliencyMapMethod jsma_params = {'theta': 1., 'gamma': 0.1, 'clip_min': 0., 'clip_max': 1., 'y_target': None} print (jsma) for sample_ind in range(0, source_samples): print('Generating sample no: ' + str(sample_ind)) sample = X_test[sample_ind:(sample_ind+1)] current_class = int(np.argmax(y_test[sample_ind])) target_classes = other_classes(2, current_class) if current_class != 0 : target_classes = [0] else : rand_class = random.randint(1,1) target_classes = [rand_class] for target in target_classes: one_hot_target = np.zeros((1, 2), dtype=np.float32) one_hot_target[0, target] = 1 jsma_params['y_target'] = one_hot_target adv_x = jsma.generate_np(sample, **jsma_params) X_adv = np.vstack([X_adv, adv_x]) print (X_adv.shape)
错误:-
FailedPreconditionError Traceback (most recent call last)~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in _do_call(self, fn, *args) 1321 try:-> 1322 return fn(*args) 1323 except errors.OpError as e:~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in _run_fn(feed_dict, fetch_list, target_list, options, run_metadata) 1306 return self._call_tf_sessionrun(-> 1307 options, feed_dict, fetch_list, target_list, run_metadata) 1308 ~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in _call_tf_sessionrun(self, options, feed_dict, fetch_list, target_list, run_metadata) 1408 self._session, options, feed_dict, fetch_list, target_list,-> 1409 run_metadata) 1410 else:FailedPreconditionError: Attempting to use uninitialized value dense_24/bias [[Node: dense_24/bias/read = Identity[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](dense_24/bias)]] During handling of the above exception, another exception occurred:FailedPreconditionError Traceback (most recent call last)<ipython-input-47-6bcd7b5e2de4> in <module>() 54 jsma_params['y_target'] = one_hot_target 55 ---> 56 adv_x = jsma.generate_np(sample, **jsma_params) 57 58 c:\users\nishant\src\cleverhans\cleverhans\attacks.py in generate_np(self, x_val, **kwargs) 156 feed_dict[new_kwargs[name]] = feedable[name] 157 --> 158 return self.sess.run(x_adv, feed_dict) 159 160 def construct_variables(self, kwargs):~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in run(self, fetches, feed_dict, options, run_metadata) 898 try: 899 result = self._run(None, fetches, feed_dict, options_ptr,--> 900 run_metadata_ptr) 901 if run_metadata: 902 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in _run(self, handle, fetches, feed_dict, options, run_metadata) 1133 if final_fetches or final_targets or (handle and feed_dict_tensor): 1134 results = self._do_run(handle, final_targets, final_fetches,-> 1135 feed_dict_tensor, options, run_metadata) 1136 else: 1137 results = []~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata) 1314 if handle is None: 1315 return self._do_call(_run_fn, feeds, fetches, targets, options,-> 1316 run_metadata) 1317 else: 1318 return self._do_call(_prun_fn, handle, feeds, fetches)~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in _do_call(self, fn, *args) 1333 except KeyError: 1334 pass-> 1335 raise type(e)(node_def, op, message) 1336 1337 def _extend_graph(self):FailedPreconditionError: Attempting to use uninitialized value dense_24/bias [[Node: dense_24/bias/read = Identity[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](dense_24/bias)]]
最初,我删除了缩进的for循环(for sample_ind in range(0, source_samples)),但这导致了会话关闭错误
我的模型是否有问题?
回答:
看起来您是使用Keras定义模型的。如果确实如此,您需要先将Keras模型包装为CleverHans模型,然后才能在CleverHans模型上运行攻击。您可以在以下教程中找到示例:https://github.com/tensorflow/cleverhans/blob/master/cleverhans_tutorials/mnist_tutorial_keras_tf.py