Setting Evaluation Strategy in the TrainingArgs does not print validation metrics
## Environment info
<!-- You can run the command `transformers-cli env` and copy-and-paste its output below.
     Don't forget to fill out the missing fields in that output! -->
     
- `transformers` version: 3.5.1
- Platform: Linux-5.4.0-1029-aws-x86_64-with-debian-buster-sid
- Python version: 3.7.6
- PyTorch version (GPU?): 1.7.0 (True)
- Tensorflow version (GPU?): not installed (NA)
- Using GPU in script?: Yes
- Using distributed or parallel set-up in script?: No

### Who can help
@sgugger 

## Information

Model I am using (Bert, XLNet ...): BertForSequenceClassification

The problem arises when using:
* [ ] the official example scripts: (give details below)
* [x] my own modified scripts: (give details below)

The tasks I am working on is:
* [ ] an official GLUE/SQUaD task: (give the name)
* [x] my own task or dataset: (give details below)

## To reproduce

Steps to reproduce the behavior:

Set training args to 
```self.training_args.do_eval = True
     self.training_args.evaluate_during_training = True
     self.training_args.evaluation_strategy = "steps"
     self.training_args.eval_steps=128
     self.training_args.logging_steps=128
```
Then pass to Trainer 

```
trainer = Trainer(
            model=model,
            args=self.training_args,
            train_dataset=training_set,
            eval_dataset=eval_set,
            compute_metrics=self.compute_metrics,
        )
```

## Expected behavior

Validation metrics are printed out on every 128th step. Right now, only logging steps appear in logs on the console. I 
looked thorough forums and others don't seem to have this issue. Any help on resolving this would be hugely appreciated 
since I can't train without validation metrics.

It looked like evaluate_during_training isn't required, but it won't work with or without it set.


The steps you indicate to reproduce are incomplete, there is little we can do without knowing which script you're running and having access to the full code. For instance
```
python examples/text-classification/run_glue.py \
  --model_name_or_path bert-base-cased \
  --task_name mrpc \
  --do_train \
  --do_eval \
  --max_seq_length 128 \
  --per_device_train_batch_size 32 \
  --learning_rate 4e-5 \
  --num_train_epochs 3.0 \
  --output_dir ~/tmp/mnli/ \
  --overwrite_output_dir \
  --save_total_limit 5 \
  --evaluation_strategy steps \
  --eval_steps 128 \
  --logging_steps 128
```
does print the metrics every 128 steps.

My guess is this is all because you're not creating a `training_args` using the `TrainingArguments` init, thus `self.training_args.evaluation_strategy` is improperly set. Try using 
```
self.training_args.evaluation_strategy = EvaluationStrategy.STEPS
```
(but you really should be using the  `TrainingArguments` init that has more checks and properly sets those arguments).<|||||>@sgugger After trying to set the strategy in the constructor, it works as intended! Thank you for a quick solve. I was setting some of the `Arg` object's field without the constructor, so I was getting the unexpected behaviour.<|||||>So be sure to use that then. The init wraps the string in the enum for you, that's why you don't need to do it when using it.
Closing this issue since you're saying it's solved, don't hesitate to reopen if needed.