Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
transformers
Commits
469384a7
Unverified
Commit
469384a7
authored
May 20, 2021
by
Sylvain Gugger
Committed by
GitHub
May 20, 2021
Browse files
Fix regression in regression (#11785)
* Fix regression in regression * Add test
parent
5ad5cc71
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
65 additions
and
15 deletions
+65
-15
src/transformers/models/albert/modeling_albert.py
src/transformers/models/albert/modeling_albert.py
+4
-1
src/transformers/models/bert/modeling_bert.py
src/transformers/models/bert/modeling_bert.py
+4
-1
src/transformers/models/big_bird/modeling_big_bird.py
src/transformers/models/big_bird/modeling_big_bird.py
+4
-1
src/transformers/models/convbert/modeling_convbert.py
src/transformers/models/convbert/modeling_convbert.py
+4
-1
src/transformers/models/distilbert/modeling_distilbert.py
src/transformers/models/distilbert/modeling_distilbert.py
+4
-1
src/transformers/models/electra/modeling_electra.py
src/transformers/models/electra/modeling_electra.py
+4
-1
src/transformers/models/funnel/modeling_funnel.py
src/transformers/models/funnel/modeling_funnel.py
+4
-1
src/transformers/models/longformer/modeling_longformer.py
src/transformers/models/longformer/modeling_longformer.py
+4
-1
src/transformers/models/mobilebert/modeling_mobilebert.py
src/transformers/models/mobilebert/modeling_mobilebert.py
+4
-1
src/transformers/models/reformer/modeling_reformer.py
src/transformers/models/reformer/modeling_reformer.py
+4
-1
src/transformers/models/roberta/modeling_roberta.py
src/transformers/models/roberta/modeling_roberta.py
+4
-1
src/transformers/models/squeezebert/modeling_squeezebert.py
src/transformers/models/squeezebert/modeling_squeezebert.py
+4
-1
src/transformers/models/xlm/modeling_xlm.py
src/transformers/models/xlm/modeling_xlm.py
+4
-1
src/transformers/models/xlnet/modeling_xlnet.py
src/transformers/models/xlnet/modeling_xlnet.py
+4
-1
tests/test_modeling_common.py
tests/test_modeling_common.py
+9
-1
No files found.
src/transformers/models/albert/modeling_albert.py
View file @
469384a7
...
@@ -1037,7 +1037,10 @@ class AlbertForSequenceClassification(AlbertPreTrainedModel):
...
@@ -1037,7 +1037,10 @@ class AlbertForSequenceClassification(AlbertPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/bert/modeling_bert.py
View file @
469384a7
...
@@ -1528,7 +1528,10 @@ class BertForSequenceClassification(BertPreTrainedModel):
...
@@ -1528,7 +1528,10 @@ class BertForSequenceClassification(BertPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/big_bird/modeling_big_bird.py
View file @
469384a7
...
@@ -2671,7 +2671,10 @@ class BigBirdForSequenceClassification(BigBirdPreTrainedModel):
...
@@ -2671,7 +2671,10 @@ class BigBirdForSequenceClassification(BigBirdPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/convbert/modeling_convbert.py
View file @
469384a7
...
@@ -1023,7 +1023,10 @@ class ConvBertForSequenceClassification(ConvBertPreTrainedModel):
...
@@ -1023,7 +1023,10 @@ class ConvBertForSequenceClassification(ConvBertPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/distilbert/modeling_distilbert.py
View file @
469384a7
...
@@ -642,7 +642,10 @@ class DistilBertForSequenceClassification(DistilBertPreTrainedModel):
...
@@ -642,7 +642,10 @@ class DistilBertForSequenceClassification(DistilBertPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/electra/modeling_electra.py
View file @
469384a7
...
@@ -964,7 +964,10 @@ class ElectraForSequenceClassification(ElectraPreTrainedModel):
...
@@ -964,7 +964,10 @@ class ElectraForSequenceClassification(ElectraPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/funnel/modeling_funnel.py
View file @
469384a7
...
@@ -1298,7 +1298,10 @@ class FunnelForSequenceClassification(FunnelPreTrainedModel):
...
@@ -1298,7 +1298,10 @@ class FunnelForSequenceClassification(FunnelPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/longformer/modeling_longformer.py
View file @
469384a7
...
@@ -1872,7 +1872,10 @@ class LongformerForSequenceClassification(LongformerPreTrainedModel):
...
@@ -1872,7 +1872,10 @@ class LongformerForSequenceClassification(LongformerPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/mobilebert/modeling_mobilebert.py
View file @
469384a7
...
@@ -1279,7 +1279,10 @@ class MobileBertForSequenceClassification(MobileBertPreTrainedModel):
...
@@ -1279,7 +1279,10 @@ class MobileBertForSequenceClassification(MobileBertPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/reformer/modeling_reformer.py
View file @
469384a7
...
@@ -2445,7 +2445,10 @@ class ReformerForSequenceClassification(ReformerPreTrainedModel):
...
@@ -2445,7 +2445,10 @@ class ReformerForSequenceClassification(ReformerPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/roberta/modeling_roberta.py
View file @
469384a7
...
@@ -1178,7 +1178,10 @@ class RobertaForSequenceClassification(RobertaPreTrainedModel):
...
@@ -1178,7 +1178,10 @@ class RobertaForSequenceClassification(RobertaPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/squeezebert/modeling_squeezebert.py
View file @
469384a7
...
@@ -798,7 +798,10 @@ class SqueezeBertForSequenceClassification(SqueezeBertPreTrainedModel):
...
@@ -798,7 +798,10 @@ class SqueezeBertForSequenceClassification(SqueezeBertPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/xlm/modeling_xlm.py
View file @
469384a7
...
@@ -847,7 +847,10 @@ class XLMForSequenceClassification(XLMPreTrainedModel):
...
@@ -847,7 +847,10 @@ class XLMForSequenceClassification(XLMPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
src/transformers/models/xlnet/modeling_xlnet.py
View file @
469384a7
...
@@ -1562,7 +1562,10 @@ class XLNetForSequenceClassification(XLNetPreTrainedModel):
...
@@ -1562,7 +1562,10 @@ class XLNetForSequenceClassification(XLNetPreTrainedModel):
if
self
.
config
.
problem_type
==
"regression"
:
if
self
.
config
.
problem_type
==
"regression"
:
loss_fct
=
MSELoss
()
loss_fct
=
MSELoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
)
if
self
.
num_labels
==
1
:
loss
=
loss_fct
(
logits
.
squeeze
(),
labels
.
squeeze
())
else
:
loss
=
loss_fct
(
logits
,
labels
)
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
elif
self
.
config
.
problem_type
==
"single_label_classification"
:
loss_fct
=
CrossEntropyLoss
()
loss_fct
=
CrossEntropyLoss
()
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
loss
=
loss_fct
(
logits
.
view
(
-
1
,
self
.
num_labels
),
labels
.
view
(
-
1
))
...
...
tests/test_modeling_common.py
View file @
469384a7
...
@@ -20,6 +20,7 @@ import os.path
...
@@ -20,6 +20,7 @@ import os.path
import
random
import
random
import
tempfile
import
tempfile
import
unittest
import
unittest
import
warnings
from
typing
import
List
,
Tuple
from
typing
import
List
,
Tuple
from
huggingface_hub
import
HfApi
from
huggingface_hub
import
HfApi
...
@@ -1462,7 +1463,14 @@ class ModelTesterMixin:
...
@@ -1462,7 +1463,14 @@ class ModelTesterMixin:
inputs
[
"labels"
]
=
inputs
[
"labels"
].
to
(
problem_type
[
"dtype"
])
inputs
[
"labels"
]
=
inputs
[
"labels"
].
to
(
problem_type
[
"dtype"
])
loss
=
model
(
**
inputs
).
loss
# This tests that we do not trigger the warning form PyTorch "Using a target size that is different
# to the input size. This will likely lead to incorrect results due to broadcasting. Please ensure
# they have the same size." which is a symptom something in wrong for the regression problem.
# See https://github.com/huggingface/transformers/issues/11780
with
warnings
.
catch_warnings
(
record
=
True
)
as
warning_list
:
loss
=
model
(
**
inputs
).
loss
self
.
assertListEqual
(
warning_list
,
[])
loss
.
backward
()
loss
.
backward
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment