How to normalize Keras network output in a regression problem that demands output with unit L2 norm?
My regression problem requires that the network output y has unit norm ||y|| = 1.. I would like to impose that as a Lambda layer after the linear activation:
from keras import backend as K
...
model.add(Dense(numOutputs, activation='linear'))
model.add(Lambda(lambda x: K.l2_normalize(x)))
The backend is TensorFlow. The code compiles but the network predicts output vectors with distinct norms (the norm is not 1 and varies).
Any hints regarding what I am doing wrongly?
python tensorflow machine-learning keras regression
add a comment |
My regression problem requires that the network output y has unit norm ||y|| = 1.. I would like to impose that as a Lambda layer after the linear activation:
from keras import backend as K
...
model.add(Dense(numOutputs, activation='linear'))
model.add(Lambda(lambda x: K.l2_normalize(x)))
The backend is TensorFlow. The code compiles but the network predicts output vectors with distinct norms (the norm is not 1 and varies).
Any hints regarding what I am doing wrongly?
python tensorflow machine-learning keras regression
add a comment |
My regression problem requires that the network output y has unit norm ||y|| = 1.. I would like to impose that as a Lambda layer after the linear activation:
from keras import backend as K
...
model.add(Dense(numOutputs, activation='linear'))
model.add(Lambda(lambda x: K.l2_normalize(x)))
The backend is TensorFlow. The code compiles but the network predicts output vectors with distinct norms (the norm is not 1 and varies).
Any hints regarding what I am doing wrongly?
python tensorflow machine-learning keras regression
My regression problem requires that the network output y has unit norm ||y|| = 1.. I would like to impose that as a Lambda layer after the linear activation:
from keras import backend as K
...
model.add(Dense(numOutputs, activation='linear'))
model.add(Lambda(lambda x: K.l2_normalize(x)))
The backend is TensorFlow. The code compiles but the network predicts output vectors with distinct norms (the norm is not 1 and varies).
Any hints regarding what I am doing wrongly?
python tensorflow machine-learning keras regression
python tensorflow machine-learning keras regression
edited Nov 23 '18 at 13:33
today
11.3k22239
11.3k22239
asked Nov 23 '18 at 6:01
EdsonEdson
84
84
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
The problem is that you haven't passed the axis argument to the K.l2_normalize function. As a result it would normalize all the elements in the whole batch so that their norm would be equal to one. To resolve this, just pass axis=-1 to normalize over the last axis:
model.add(Lambda(lambda x: K.l2_normalize(x, axis=-1)))
Great. This solves the issue. I get norm = 1 now.
– Edson
Nov 23 '18 at 16:14
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53441343%2fhow-to-normalize-keras-network-output-in-a-regression-problem-that-demands-outpu%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The problem is that you haven't passed the axis argument to the K.l2_normalize function. As a result it would normalize all the elements in the whole batch so that their norm would be equal to one. To resolve this, just pass axis=-1 to normalize over the last axis:
model.add(Lambda(lambda x: K.l2_normalize(x, axis=-1)))
Great. This solves the issue. I get norm = 1 now.
– Edson
Nov 23 '18 at 16:14
add a comment |
The problem is that you haven't passed the axis argument to the K.l2_normalize function. As a result it would normalize all the elements in the whole batch so that their norm would be equal to one. To resolve this, just pass axis=-1 to normalize over the last axis:
model.add(Lambda(lambda x: K.l2_normalize(x, axis=-1)))
Great. This solves the issue. I get norm = 1 now.
– Edson
Nov 23 '18 at 16:14
add a comment |
The problem is that you haven't passed the axis argument to the K.l2_normalize function. As a result it would normalize all the elements in the whole batch so that their norm would be equal to one. To resolve this, just pass axis=-1 to normalize over the last axis:
model.add(Lambda(lambda x: K.l2_normalize(x, axis=-1)))
The problem is that you haven't passed the axis argument to the K.l2_normalize function. As a result it would normalize all the elements in the whole batch so that their norm would be equal to one. To resolve this, just pass axis=-1 to normalize over the last axis:
model.add(Lambda(lambda x: K.l2_normalize(x, axis=-1)))
answered Nov 23 '18 at 13:31
todaytoday
11.3k22239
11.3k22239
Great. This solves the issue. I get norm = 1 now.
– Edson
Nov 23 '18 at 16:14
add a comment |
Great. This solves the issue. I get norm = 1 now.
– Edson
Nov 23 '18 at 16:14
Great. This solves the issue. I get norm = 1 now.
– Edson
Nov 23 '18 at 16:14
Great. This solves the issue. I get norm = 1 now.
– Edson
Nov 23 '18 at 16:14
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53441343%2fhow-to-normalize-keras-network-output-in-a-regression-problem-that-demands-outpu%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown