Cannot compile DQN agent: TypeError: ('Keyword argument not understood:', 'units') - keras-rl

I have this model:
poss_in = layers.Input((1,))
poss_lr = layers.Dense(8, activation='relu')(poss_in)
hist_in = layers.Input((100,))
hist_lr = layers.Reshape((100, 1))(hist_in)
hist_lr = layers.LSTM(32)(hist_lr)
hist_lr = layers.Dense(32, activation='relu')(hist_lr)
sent_in = layers.Input((10,))
sent_lr = layers.Reshape((10, 1))(sent_in)
sent_lr = layers.Conv1D(4, 3)(sent_lr)
sent_lr = layers.GRU(4)(sent_lr)
root_lr = layers.concatenate([poss_lr, hist_lr, sent_lr])
root_lr = layers.Reshape((44, 1))(root_lr)
root_lr = Attention(16)(root_lr)
root_lr = layers.Dense(16)(root_lr)
root_lr = layers.Dense(1)(root_lr)
model = Model([poss_in, hist_in, sent_in], root_lr)
and I'm trying to create a DQN agent with:
dqn = agents.DQNAgent(
model=model,
memory=memory.SequentialMemory(limit=50000, window_length=1),
policy=policy.BoltzmannQPolicy(),
nb_actions=1,
nb_steps_warmup=64,
target_model_update=1e-2
)
dqn.compile('Adam', metrics=['mae'])
but I receive this error:
/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/adam.py:105: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
super(Adam, self).__init__(name, **kwargs)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-18-3d71fb800af2> in <module>
7 target_model_update=1e-2
8 )
----> 9 dqn.compile(opt.Adam(lr=1e-3), metrics=['mae'])
17 frames
/usr/local/lib/python3.7/dist-packages/rl/agents/dqn.py in compile(self, optimizer, metrics)
165
166 # We never train the target model, hence we can set the optimizer and loss arbitrarily.
--> 167 self.target_model = clone_model(self.model, self.custom_model_objects)
168 self.target_model.compile(optimizer='sgd', loss='mse')
169 self.model.compile(optimizer='sgd', loss='mse')
/usr/local/lib/python3.7/dist-packages/rl/util.py in clone_model(model, custom_objects)
13 'config': model.get_config(),
14 }
---> 15 clone = model_from_config(config, custom_objects=custom_objects)
16 clone.set_weights(model.get_weights())
17 return clone
/usr/local/lib/python3.7/dist-packages/keras/saving/model_config.py in model_from_config(config, custom_objects)
50 '`Sequential.from_config(config)`?')
51 from keras.layers import deserialize # pylint: disable=g-import-not-at-top
---> 52 return deserialize(config, custom_objects=custom_objects)
53
54
/usr/local/lib/python3.7/dist-packages/keras/layers/serialization.py in deserialize(config, custom_objects)
209 module_objects=LOCAL.ALL_OBJECTS,
210 custom_objects=custom_objects,
--> 211 printable_module_name='layer')
212
213
/usr/local/lib/python3.7/dist-packages/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
681 custom_objects=dict(
682 list(_GLOBAL_CUSTOM_OBJECTS.items()) +
--> 683 list(custom_objects.items())))
684 else:
685 with CustomObjectScope(custom_objects):
/usr/local/lib/python3.7/dist-packages/keras/engine/functional.py in from_config(cls, config, custom_objects)
707 'name', 'layers', 'input_layers', 'output_layers']):
708 input_tensors, output_tensors, created_layers = reconstruct_from_config(
--> 709 config, custom_objects)
710 model = cls(
711 inputs=input_tensors,
/usr/local/lib/python3.7/dist-packages/keras/engine/functional.py in reconstruct_from_config(config, custom_objects, created_layers)
1324 # First, we create all layers and enqueue nodes to be processed
1325 for layer_data in config['layers']:
-> 1326 process_layer(layer_data)
1327 # Then we process nodes in order of layer depth.
1328 # Nodes that cannot yet be processed (if the inbound node
/usr/local/lib/python3.7/dist-packages/keras/engine/functional.py in process_layer(layer_data)
1306 from keras.layers import deserialize as deserialize_layer # pylint: disable=g-import-not-at-top
1307
-> 1308 layer = deserialize_layer(layer_data, custom_objects=custom_objects)
1309 created_layers[layer_name] = layer
1310
/usr/local/lib/python3.7/dist-packages/keras/layers/serialization.py in deserialize(config, custom_objects)
209 module_objects=LOCAL.ALL_OBJECTS,
210 custom_objects=custom_objects,
--> 211 printable_module_name='layer')
212
213
/usr/local/lib/python3.7/dist-packages/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
684 else:
685 with CustomObjectScope(custom_objects):
--> 686 deserialized_obj = cls.from_config(cls_config)
687 else:
688 # Then `cls` may be a function returning a class.
/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer_v1.py in from_config(cls, config)
515 A layer instance.
516 """
--> 517 return cls(**config)
518
519 def compute_output_shape(self, input_shape):
/usr/local/lib/python3.7/dist-packages/keras/layers/dense_attention.py in __init__(self, use_scale, **kwargs)
321
322 def __init__(self, use_scale=False, **kwargs):
--> 323 super(Attention, self).__init__(**kwargs)
324 self.use_scale = use_scale
325
/usr/local/lib/python3.7/dist-packages/keras/layers/dense_attention.py in __init__(self, causal, dropout, **kwargs)
70
71 def __init__(self, causal=False, dropout=0.0, **kwargs):
---> 72 super(BaseDenseAttention, self).__init__(**kwargs)
73 self.causal = causal
74 self.dropout = dropout
/usr/local/lib/python3.7/dist-packages/tensorflow/python/training/tracking/base.py in _method_wrapper(self, *args, **kwargs)
627 self._self_setattr_tracking = False # pylint: disable=protected-access
628 try:
--> 629 result = method(self, *args, **kwargs)
630 finally:
631 self._self_setattr_tracking = previous_value # pylint: disable=protected-access
/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py in __init__(self, seed, force_generator, **kwargs)
3436 **kwargs: other keyword arguments that will be passed to the parent class
3437 """
-> 3438 super().__init__(**kwargs)
3439 self._random_generator = backend.RandomGenerator(
3440 seed, force_generator=force_generator)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/training/tracking/base.py in _method_wrapper(self, *args, **kwargs)
627 self._self_setattr_tracking = False # pylint: disable=protected-access
628 try:
--> 629 result = method(self, *args, **kwargs)
630 finally:
631 self._self_setattr_tracking = previous_value # pylint: disable=protected-access
/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer_v1.py in __init__(self, trainable, name, dtype, dynamic, **kwargs)
138 }
139 # Validate optional keyword arguments.
--> 140 generic_utils.validate_kwargs(kwargs, allowed_kwargs)
141
142 # Mutable properties
/usr/local/lib/python3.7/dist-packages/keras/utils/generic_utils.py in validate_kwargs(kwargs, allowed_kwargs, error_message)
1172 for kwarg in kwargs:
1173 if kwarg not in allowed_kwargs:
-> 1174 raise TypeError(error_message, kwarg)
1175
1176
TypeError: ('Keyword argument not understood:', 'units')
I have tryied to replace the DQN with SARSA and DDPG agents but they all generated the same error.
I looked up the problem in internet for a while and I've asked on r/tensorflow but I haven't resolved anything yet.
For additional information, I'm using Google Colab.
Thanks for every reply!
UPDATE:
I tryied to simplify the model in order to check if the problem was in a layer, so I created this model:
poss_in = layers.Input((1,))
poss_lr = layers.Dense(1)(poss_in)
hist_in = layers.Input((100,))
hist_lr = layers.Dense(1)(hist_in)
sent_in = layers.Input((10,))
sent_lr = layers.Dense(1)(sent_in)
root_lr = layers.concatenate([poss_lr, hist_lr, sent_lr])
root_lr = layers.Dense(1)(root_lr)
model = Model([poss_in, hist_in, sent_in], root_lr)
Using this model the DQN agent was compiled with no errors.

Related

How to get the shap values for the masked language modeling task using transformer?

I am trying to get the shap values for the masked language modeling task using transformer. I get the error KeyError: 'label' for the code where I input a single data sample to get the explanation. My complete code and error trace are as follows:
import transformers
import shap
from transformers import RobertaTokenizer, RobertaForMaskedLM, pipeline
import torch
model = RobertaForMaskedLM.from_pretrained('microsoft/codebert-base-mlm')
tokenizer = RobertaTokenizer.from_pretrained('microsoft/codebert-base-mlm')
code_example = "if (x <mask> 10)"
fill_mask = pipeline('fill-mask', model=model, tokenizer=tokenizer)
explainer = shap.Explainer(fill_mask)
shap_values = explainer(['x {tokenizer.mask_token} 10'])
Following is the error trace
KeyError Traceback (most recent call last)
[<ipython-input-12-bb3832d1772d>](https://localhost:8080/#) in <module>
6 # explain the model on two sample inputs
7 explainer = shap.Explainer(fill_mask)
----> 8 shap_values = explainer(['x {tokenizer.mask_token} 10'])
9 print(shap_values)
10 # visualize the first prediction's explanation for the POSITIVE output class
5 frames
[/usr/local/lib/python3.7/dist-packages/shap/explainers/_partition.py](https://localhost:8080/#) in __call__(self, max_evals, fixed_context, main_effects, error_bounds, batch_size, outputs, silent, *args)
136 return super().__call__(
137 *args, max_evals=max_evals, fixed_context=fixed_context, main_effects=main_effects, error_bounds=error_bounds, batch_size=batch_size,
--> 138 outputs=outputs, silent=silent
139 )
140
[/usr/local/lib/python3.7/dist-packages/shap/explainers/_explainer.py](https://localhost:8080/#) in __call__(self, max_evals, main_effects, error_bounds, batch_size, outputs, silent, *args, **kwargs)
266 row_result = self.explain_row(
267 *row_args, max_evals=max_evals, main_effects=main_effects, error_bounds=error_bounds,
--> 268 batch_size=batch_size, outputs=outputs, silent=silent, **kwargs
269 )
270 values.append(row_result.get("values", None))
[/usr/local/lib/python3.7/dist-packages/shap/explainers/_partition.py](https://localhost:8080/#) in explain_row(self, max_evals, main_effects, error_bounds, batch_size, outputs, silent, fixed_context, *row_args)
159 # if not fixed background or no base value assigned then compute base value for a row
160 if self._curr_base_value is None or not getattr(self.masker, "fixed_background", False):
--> 161 self._curr_base_value = fm(m00.reshape(1, -1), zero_index=0)[0] # the zero index param tells the masked model what the baseline is
162 f11 = fm(~m00.reshape(1, -1))[0]
163
[/usr/local/lib/python3.7/dist-packages/shap/utils/_masked_model.py](https://localhost:8080/#) in __call__(self, masks, zero_index, batch_size)
65
66 else:
---> 67 return self._full_masking_call(masks, batch_size=batch_size)
68
69 def _full_masking_call(self, masks, zero_index=None, batch_size=None):
[/usr/local/lib/python3.7/dist-packages/shap/utils/_masked_model.py](https://localhost:8080/#) in _full_masking_call(self, masks, zero_index, batch_size)
142
143 joined_masked_inputs = tuple([np.concatenate(v) for v in all_masked_inputs])
--> 144 outputs = self.model(*joined_masked_inputs)
145 _assert_output_input_match(joined_masked_inputs, outputs)
146 all_outputs.append(outputs)
[/usr/local/lib/python3.7/dist-packages/shap/models/_transformers_pipeline.py](https://localhost:8080/#) in __call__(self, strings)
33 val = [val]
34 for obj in val:
---> 35 output[i, self.label2id[obj["label"]]] = sp.special.logit(obj["score"]) if self.rescale_to_logits else obj["score"]
36 return output
KeyError: 'label'

Error when using mode.generate() from Transformers - TypeError: forward() got an unexpected keyword argument 'return_dict'

I am trying to perform inference with a finetuned GPT2HeadWithValueModel from the Transformers library. I'm using the model.generate() method from generation_utils.py
I am using this function to call the generate() method:
def top_p_sampling(text, model, tokenizer):
encoding = tokenizer(text, return_tensors="pt")['input_ids']
output_tensor = model.generate(
encoding,
do_sample=True,
max_length=max_len,
top_k=50,
top_p= .92,
temperature= .9,
early_stopping=False)
return tokenizer.decode(output_tensor[0], skip_special_tokens=True).strip()
But when i try:
text = "this is an example of input text"
comp = top_p_sampling(text, model_name, tokenizer_name)
I get the following error:
TypeError: forward() got an unexpected keyword argument 'return_dict'
Full traceback:
TypeError Traceback (most recent call last)
<ipython-input-24-cc7c3f8aa367> in <module>()
1 text = "this is an example of input text"
----> 2 comp = top_p_sampling(text, model_name, tokenizer_name)
4 frames
<ipython-input-23-a5241487f309> in top_p_sampling(text, model, tokenizer)
9 temperature=temp,
10 early_stopping=False,
---> 11 return_dict=False)
12
13 return tokenizer.decode(output_tensor[0], skip_special_tokens=True).strip()
/usr/local/lib/python3.7/dist-packages/torch/autograd/grad_mode.py in decorate_context(*args, **kwargs)
26 def decorate_context(*args, **kwargs):
27 with self.__class__():
---> 28 return func(*args, **kwargs)
29 return cast(F, decorate_context)
30
/usr/local/lib/python3.7/dist-packages/transformers/generation_utils.py in generate(self, input_ids, max_length, min_length, do_sample, early_stopping, num_beams, temperature, top_k, top_p, repetition_penalty, bad_words_ids, bos_token_id, pad_token_id, eos_token_id, length_penalty, no_repeat_ngram_size, encoder_no_repeat_ngram_size, num_return_sequences, decoder_start_token_id, use_cache, num_beam_groups, diversity_penalty, prefix_allowed_tokens_fn, output_attentions, output_hidden_states, output_scores, return_dict_in_generate, **model_kwargs)
938 output_scores=output_scores,
939 return_dict_in_generate=return_dict_in_generate,
--> 940 **model_kwargs,
941 )
942
/usr/local/lib/python3.7/dist-packages/transformers/generation_utils.py in sample(self, input_ids, logits_processor, logits_warper, max_length, pad_token_id, eos_token_id, output_attentions, output_hidden_states, output_scores, return_dict_in_generate, **model_kwargs)
1383 return_dict=True,
1384 output_attentions=output_attentions,
-> 1385 output_hidden_states=output_hidden_states,
1386 )
1387 next_token_logits = outputs.logits[:, -1, :]
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
1100 if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
1101 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1102 return forward_call(*input, **kwargs)
1103 # Do not call functions when jit is used
1104 full_backward_hooks, non_full_backward_hooks = [], []
TypeError: forward() got an unexpected keyword argument 'return_dict'
I'm a bit of a rookie, so I hope someone can point out what I'm doing wrong. Thanks a lot

'Image' object has no attribute 'shape'; Pytorch Object Detection

I doing object detection with Pytorch/Torchvision with this tutorial, which is very similar to the official pytorch Tutorial.
https://towardsdatascience.com/building-your-own-object-detector-pytorch-vs-tensorflow-and-how-to-even-get-started-1d314691d4ae
While training the model, execution stops after set epochs and gives me this error:
/usr/local/lib/python3.7/dist-packages/torch/autograd/grad_mode.py in decorate_context(*args, **kwargs)
26 def decorate_context(*args, **kwargs):
27 with self.__class__():
---> 28 return func(*args, **kwargs)
29 return cast(F, decorate_context)
30
/content/Pytorch_OD/My Drive/Pytorch_OD/vision/engine.py in evaluate(model, data_loader, device)
78 header = 'Test:'
79
---> 80 coco = get_coco_api_from_dataset(data_loader.dataset)
81 iou_types = _get_iou_types(model)
82 coco_evaluator = CocoEvaluator(coco, iou_types)
/content/Pytorch_OD/My Drive/Pytorch_OD/vision/coco_utils.py in get_coco_api_from_dataset(dataset)
204 if isinstance(dataset, torchvision.datasets.CocoDetection):
205 return dataset.coco
--> 206 return convert_to_coco_api(dataset)
207
208
/content/Pytorch_OD/My Drive/Pytorch_OD/vision/coco_utils.py in convert_to_coco_api(ds)
157 img_dict = {}
158 img_dict['id'] = image_id
--> 159 img_dict['height'] = img.shape[-2]
160 img_dict['width'] = img.shape[-1]
161 dataset['images'].append(img_dict)
AttributeError: 'Image' object has no attribute 'shape
'Image' is imported via from PIL import Image.
The attribute shape is not being defined in the code in my notebook.
Can it be that itis an error in the source file of coco_utils.py?
Or do I need to provide more information or parts of my code?

Cannot run pool.amap() twice in pathos.multiprocessing

I want to parallelize simulation of multiple agents. Because I want my results to be instances of a class, to avoid issues with serialization I use pathos.multiprocessing instead of multiprocessing.
I do it like this:
import pathos.multiprocessing as mp
sim_agent(T): #simulate single agent for T periods
ag = agent()
for t in range(T):
ag.step()
return ag
def simulate_parallel(N, T):
if __name__ == '__main__':
pool = mp.ProcessPool()
results = pool.amap(sim_agent, [T]*N)
agents = results.get()
return agents
I can run simulate_parallel once. When I do it again, I get an error:
--> 142 agents = results.get()
~/anaconda3/anaconda3/lib/python3.7/site-packages/multiprocess/pool.py in get(self, timeout)
655 return self._value
656 else:
--> 657 raise self._value
658
659 def _set(self, i, obj):
~/anaconda3/anaconda3/lib/python3.7/site-packages/multiprocess/pool.py in _handle_tasks(taskqueue, put, outqueue, pool, cache)
429 break
430 try:
--> 431 put(task)
432 except Exception as e:
433 job, idx = task[:2]
~/anaconda3/anaconda3/lib/python3.7/site-packages/multiprocess/connection.py in send(self, obj)
207 self._check_closed()
208 self._check_writable()
--> 209 self._send_bytes(_ForkingPickler.dumps(obj))
210
211 def recv_bytes(self, maxlength=None):
~/anaconda3/anaconda3/lib/python3.7/site-packages/multiprocess/connection.py in _send_bytes(self, buf)
394 n = len(buf)
395 # For wire compatibility with 3.2 and lower
--> 396 header = struct.pack("!i", n)
397 if n > 16384:
398 # The payload is large so Nagle's algorithm won't be triggered
error: 'i' format requires -2147483648 <= number <= 2147483647
I also get the same error when I try to use pool.amap() in other functions. Even when I make N and T small, it is still the same behavior: I can run simulate_parallel once and cannot do it for the second time. Why could that be? Thanks!

KeyError: 'Entity c does not exist in dfs'

when i try to run this code,
ftr_mtrx_custmr, features_defs = ft.dfs(entities=entities,
relationships=relationship,
target_entity="transactions")
i get such error,
490 featuretools.entityset - WARNING index session_id not found in dataframe, creating new integer column
KeyError Traceback (most recent call last)
<ipython-input-82-d467a36d5254> in <module>()
1 ftr_mtrx_custmr, features_defs = ft.dfs(entities=entities,
2 relationships=relationshp,
----> 3 target_entity="transactions")
4 frames
/usr/local/lib/python3.6/dist-packages/featuretools/utils/entry_point.py
in function_wrapper(*args, **kwargs)
38 ep.on_error(error=e,
39 runtime=runtime)
---> 40 raise e
41
42 # send return value
/usr/local/lib/python3.6/dist-packages/featuretools/utils/entry_point.py
in function_wrapper(*args, **kwargs)
30 # call function
31 start = time.time()
---> 32 return_value = func(*args, **kwargs)
33 runtime = time.time() - start
34 except Exception as e:
/usr/local/lib/python3.6/dist-packages/featuretools/synthesis/dfs.py
in dfs(entities, relationships, entityset, target_entity, cutoff_time,
instance_ids, agg_primitives, trans_primitives,
groupby_trans_primitives, allowed_paths, max_depth, ignore_entities,
ignore_variables, primitive_options, seed_features, drop_contains,
drop_exact, where_primitives, max_features, cutoff_time_in_index,
save_progress, features_only, training_window, approximate,
chunk_size, n_jobs, dask_kwargs, verbose, return_variable_types,
progress_callback)
225 '''
226 if not isinstance(entityset, EntitySet):
--> 227 entityset = EntitySet("dfs", entities, relationships)
228
229 dfs_object = DeepFeatureSynthesis(target_entity, entityset,
/usr/local/lib/python3.6/dist-packages/featuretools/entityset/entityset.py
in init(self, id, entities, relationships)
83
84 for relationship in relationships:
---> 85 parent_variable = self[relationship[0]][relationship[1]]
86 child_variable = self[relationship[2]][relationship[3]]
87 self.add_relationship(Relationship(parent_variable,
/usr/local/lib/python3.6/dist-packages/featuretools/entityset/entityset.py
in getitem(self, entity_id)
124 return self.entity_dict[entity_id]
125 name = self.id or "entity set"
--> 126 raise KeyError('Entity %s does not exist in %s' % (entity_id, name))
127
128 #property
however, this returned KeyError : 'Entity c does not exist in dfs'
any idea what's wrong with my code?

Resources