Closed DableUTeeF closed 5 years ago
@DableUTeeF, You must designate the input_shape as (rows, cols, channels)
, thus the line is necessary.
Why is it necessary? Of cource you need to specific the shape but it's not has to be (224, 224, 3) right? Even (416, 416, 3) works just fine but that line make this errer!!
On Fri, Jul 5, 2019, 12:07 Taehoon Lee notifications@github.com wrote:
@DableUTeeF https://github.com/DableUTeeF, You must designate the input_shape as (rows, cols, channels), thus the line is necessary.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/keras-team/keras-applications/issues/122?email_source=notifications&email_token=AE4R763QTS6FEUTE27W2YGDP53JIDA5CNFSM4H4WXDL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZIRMUY#issuecomment-508630611, or mute the thread https://github.com/notifications/unsubscribe-auth/AE4R763O2QQFGJEVSOFNXJDP53JIDANCNFSM4H4WXDLQ .
@DableUTeeF, the following example works fine without an error.
import numpy as np
from keras.applications.mobilenet import MobileNet
model = MobileNet(include_top=False, input_shape=(416, 416, 3))
print(model.predict(np.random.random((1, 416, 416, 3))).shape)
model2 = MobileNet(weights=None, input_shape=(416, 416, 3))
print(model2.predict(np.random.random((1, 416, 416, 3))).shape)
Indeed But for some reasons this raise error in Colab.
model = tf.keras.applications.nasnet.NASNetLarge(
include_top=False,
weights='imagenet',
input_tensor=None,
input_shape=(224, 224, 3),
pooling=None)
On Fri, Jul 5, 2019, 12:50 Taehoon Lee notifications@github.com wrote:
@DableUTeeF https://github.com/DableUTeeF, the following example works fine without an error.
import numpy as npfrom keras.applications.mobilenet import MobileNet model = MobileNet(include_top=False, input_shape=(416, 416, 3))print(model.predict(np.random.random((1, 416, 416, 3))).shape) model2 = MobileNet(weights=None, input_shape=(416, 416, 3))print(model2.predict(np.random.random((1, 416, 416, 3))).shape)
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/keras-team/keras-applications/issues/122?email_source=notifications&email_token=AE4R767RRA2RLUZC53IBRBDP53OLNA5CNFSM4H4WXDL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZITGSI#issuecomment-508638025, or mute the thread https://github.com/notifications/unsubscribe-auth/AE4R76YCYHNIOVHTQBQT7P3P53OLNANCNFSM4H4WXDLQ .
Well, I tried it again and the MoblieNet works. But NasNet raise this
/usr/local/lib/python3.6/dist-packages/keras_applications/imagenet_utils.py in _obtain_input_shape(input_shape, default_size, min_size, data_format, require_flatten, weights)
290 'and loading `imagenet` weights, '
291 '`input_shape` should be ' +
--> 292 str(default_shape) + '.')
293 return default_shape
294 if input_shape:
ValueError: When setting `include_top=True` and loading `imagenet` weights, `input_shape` should be (331, 331, 3).
@DableUTeeF, the ValueError
of NASNet is mandatory in order to reproduce the original results. If you want to train from scratch, you can put weights=None
as an argument.
Of cource not!!
I don't mean to train it from scratch so that's why I put the
weights='imagenet'
no?
The results are far better when transferring even if you change the size,
that's why I've said this should not raise error.
On Fri, Jul 5, 2019, 13:57 Taehoon Lee notifications@github.com wrote:
@DableUTeeF https://github.com/DableUTeeF, the ValueError of NASNet is mandatory in order to reproduce the original results. If you want to train from scratch, you can put weights=None as an argument.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/keras-team/keras-applications/issues/122?email_source=notifications&email_token=AE4R76Y5I2KBANBTYSZCFG3P53WGXA5CNFSM4H4WXDL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZIWYUQ#issuecomment-508652626, or mute the thread https://github.com/notifications/unsubscribe-auth/AE4R762ORE4ZWAMASV24MY3P53WGXANCNFSM4H4WXDLQ .
Well, suppose the MobileNet does work but the NASNet doesn't, it might be something from the NASNet code rather than the utils.
On Fri, Jul 5, 2019, 14:01 ณัฐพร หงษ์เจริญ palm22180@gmail.com wrote:
Of cource not!! I don't mean to train it from scratch so that's why I put the
weights='imagenet'
no? The results are far better when transferring even if you change the size, that's why I've said this should not raise error.On Fri, Jul 5, 2019, 13:57 Taehoon Lee notifications@github.com wrote:
@DableUTeeF https://github.com/DableUTeeF, the ValueError of NASNet is mandatory in order to reproduce the original results. If you want to train from scratch, you can put weights=None as an argument.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/keras-team/keras-applications/issues/122?email_source=notifications&email_token=AE4R76Y5I2KBANBTYSZCFG3P53WGXA5CNFSM4H4WXDL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZIWYUQ#issuecomment-508652626, or mute the thread https://github.com/notifications/unsubscribe-auth/AE4R762ORE4ZWAMASV24MY3P53WGXANCNFSM4H4WXDLQ .
@DableUTeeF,
When include_top=True
, both the following models must raise ValueError.
MobileNet(input_shape=(416, 416, 3))
NASNetLarge(input_shape=(416, 416, 3))
When include_top=False
, only the NASNet must raise ValueError. It is intended behavior because this line causes structural changes. In other words, the NASNet with include_top=any, input_shape=(None, None, 3)
may differ from the intended structure of the authors.
NASNetLarge(include_top=False, input_shape=(416, 416, 3))
I know that!!
Please look at my answer above again (I don't have a PC around), I clearly
specific include_top=False
in the NASNetLarge()
.
That's should means the Nasnet code sends a True
param even though I put
it False
.
On Sat, Jul 6, 2019, 13:06 Taehoon Lee notifications@github.com wrote:
@DableUTeeF https://github.com/DableUTeeF,
- When include_top=True, both the following models must raise ValueError.
MobileNet(input_shape=(416, 416, 3)) NASNetLarge(input_shape=(416, 416, 3))
- When include_top=False, only the NASNet must raise ValueError. It is intended behavior because this line https://github.com/keras-team/keras-applications/blob/master/keras_applications/nasnet.py#L513 causes structural changes. In other words, the NASNet with include_top=any, input_shape=(None, None, 3) may differ from the intended structure of the authors.
NASNetLarge(include_top=False, input_shape=(416, 416, 3))
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/keras-team/keras-applications/issues/122?email_source=notifications&email_token=AE4R762XNNR5PAPPQZKHQGDP6AY6LA5CNFSM4H4WXDL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZKTH5I#issuecomment-508900341, or mute the thread https://github.com/notifications/unsubscribe-auth/AE4R765FQ3XGNVRDPIBCZEDP6AY6LANCNFSM4H4WXDLQ .
@DableUTeeF, the ValueError is intended. And the error message can be misleading. Do you want to revise the error message?
It's not about the message.
I mean, it's raise error when it should not.
1.) I put a specific include_top=False
but the error said include_top
is True, this is a bug right?. And if include_top
is False then whatever
input size I use shouldn't be any problem right? In fact, this does work in
MobileNet. Well, my question at first misleading this. But this same params
raise Valueerror when I change it to NasNetLarge.
2.) Despite the 1.) error, if I change the weights to None and then
manually load the weight in .keras, it works!! Which means this is
difinitely a bug in NasNet code.
On Sat, Jul 6, 2019, 13:16 Taehoon Lee notifications@github.com wrote:
@DableUTeeF https://github.com/DableUTeeF, the ValueError is intended. And the error message can be misleading. Do you want to revise the error message?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/keras-team/keras-applications/issues/122?email_source=notifications&email_token=AE4R764ML3QVRDZCXWOOK3DP6A2FPA5CNFSM4H4WXDL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZKTLZY#issuecomment-508900839, or mute the thread https://github.com/notifications/unsubscribe-auth/AE4R763FDSIIHLUWZO22PDDP6A2FPANCNFSM4H4WXDLQ .
The main problem now is "Why it's only error when I use NASNet.
On Sat, Jul 6, 2019, 13:26 ณัฐพร หงษ์เจริญ palm22180@gmail.com wrote:
It's not about the message. I mean, it's raise error when it should not. 1.) I put a specific
include_top=False
but the error saidinclude_top
is True, this is a bug right?. And ifinclude_top
is False then whatever input size I use shouldn't be any problem right? In fact, this does work in MobileNet. Well, my question at first misleading this. But this same params raise Valueerror when I change it to NasNetLarge. 2.) Despite the 1.) error, if I change the weights to None and then manually load the weight in .keras, it works!! Which means this is difinitely a bug in NasNet code.On Sat, Jul 6, 2019, 13:16 Taehoon Lee notifications@github.com wrote:
@DableUTeeF https://github.com/DableUTeeF, the ValueError is intended. And the error message can be misleading. Do you want to revise the error message?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/keras-team/keras-applications/issues/122?email_source=notifications&email_token=AE4R764ML3QVRDZCXWOOK3DP6A2FPA5CNFSM4H4WXDL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZKTLZY#issuecomment-508900839, or mute the thread https://github.com/notifications/unsubscribe-auth/AE4R763FDSIIHLUWZO22PDDP6A2FPANCNFSM4H4WXDLQ .
@DableUTeeF, That is not a bug. It is intended behavior because this line causes structural changes. In other words, the NASNet with include_top=any, input_shape=(None, None, 3)
may differ from the intended structure of the authors.
@taehoonlee As I said, I can just create model with weight=None
and load the "official Imagenet weights" without any issue.
This code works in colab.
import tensorflow as tf
model = tf.keras.applications.nasnet.NASNetLarge(
include_top=False,
weights=None,
input_tensor=None,
input_shape=(416, 416, 3),
pooling=None)
model.load_weights('/root/.keras/models/nasnet_large_no_top.h5')
And as expected, the result is much better than train everything from scratch. So even the structural is changed, it doesn't cause any problem right?
@DableUTeeF, I figured out that the structural changes have disappeared since the 1.0.6
of keras-applications. Thus, now we can enable NASNet(include_top=False)
with arbitrary input shapes. Finally you made the point clear :) Thank you
I want to train EfficientNet on the grayscale images. But the 3 channels restriction makes me have to convert grayscale to RGB which is redundant.
Is there any way to train on 1-channel images with imagenet pretrained?
I just want to train MobileNet with larger images but I have to put an Input tensor to the function otherwise it will stuck in this line.
https://github.com/keras-team/keras-applications/blob/master/keras_applications/imagenet_utils.py#L292
I believe this line is really unneeded.
Is this against the rule or should I use Pull request instead?