I’m trying to train the model using prelu
activation function, but I get the following error
JavaScript
x
22
22
1
---------------------------------------------------------------------------
2
ValueError Traceback (most recent call last)
3
/usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/array_ops.py in zeros(shape, dtype, name)
4
2965 shape = constant_op._tensor_shape_tensor_conversion_function(
5
-> 2966 tensor_shape.TensorShape(shape))
6
2967 except (TypeError, ValueError):
7
8
31 frames
9
ValueError: Cannot convert a partially known TensorShape to a Tensor: (None, None, 64)
10
11
During handling of the above exception, another exception occurred:
12
13
ValueError Traceback (most recent call last)
14
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/constant_op.py in convert_to_eager_tensor(value, ctx, dtype)
15
96 dtype = dtypes.as_dtype(dtype).as_datatype_enum
16
97 ctx.ensure_initialized()
17
---> 98 return ops.EagerTensor(value, ctx.device_name, dtype)
18
99
19
100
20
21
ValueError: Attempt to convert a value (None) with an unsupported type (<class 'NoneType'>) to a Tensor.
22
I’m using the below-mentioned code, kindly let me know how do I correct it.
JavaScript
1
31
31
1
from tensorflow.keras.applications import MobileNet
2
from tensorflow.keras.layers import (Conv2D, MaxPooling2D,
3
GlobalAveragePooling2D, Dropout, Dense)
4
from tensorflow.keras import Model
5
from tensorflow import keras
6
7
CLASSES = 2
8
#model.compile()
9
10
# setup model
11
base_model = MobileNet(weights='imagenet', include_top=False)
12
input = (224, 224, 3)
13
x = base_model.output
14
x = Conv2D(64, (3,3), padding='same', activation = keras.layers.PReLU(alpha_initializer='zeros', alpha_regularizer=None, alpha_constraint=None, shared_axes=None), strides= (2,2), name='layer1')(x)
15
x = MaxPooling2D(pool_size=(2,2))(x)
16
17
x = Conv2D(128, (3,3), padding='same', activation = keras.layers.PReLU(alpha_initializer='zeros', alpha_regularizer=None, alpha_constraint=None, shared_axes=None), name='layer2')(x)
18
19
x = GlobalAveragePooling2D(name='avg_pool')(x)
20
21
x = Dropout(0.4)(x)
22
predictions = Dense(CLASSES, activation=tf.keras.activations.sigmoid)(x)
23
model = Model(inputs=base_model.input, outputs=predictions)
24
25
# transfer learning
26
for layer in base_model.layers:
27
layer.trainable = False
28
29
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
30
31
Advertisement
Answer
Your tensor input is wrong. You need to set it up like this way
JavaScript
1
5
1
input_s = layers.Input((224, 224, 3))
2
base_model = keras.applications.MobileNet(weights='imagenet',
3
include_top=False, input_tensor=input_s)
4
5
Full working code
JavaScript
1
8
1
from tensorflow.keras.applications import MobileNet
2
from tensorflow.keras.layers import (Conv2D, MaxPooling2D,
3
GlobalAveragePooling2D, Dropout, Dense)
4
from tensorflow.keras import Model
5
from tensorflow import keras
6
from tensorflow.keras import layers
7
import tensorflow as tf
8
JavaScript
1
34
34
1
CLASSES = 2
2
# setup model
3
input_s = layers.Input((224, 224, 3))
4
base_model = keras.applications.MobileNet(weights='imagenet',
5
include_top=False, input_tensor=input_s)
6
x = layers.Conv2D(64, (3,3), padding='same',
7
activation = keras.layers.PReLU(
8
alpha_initializer='zeros',
9
alpha_regularizer=None,
10
alpha_constraint=None,
11
shared_axes=None),
12
strides= (2,2), name='layer1')(base_model.output)
13
x = layers.MaxPooling2D(pool_size=(2,2))(x)
14
x = layers.Conv2D(128, (3,3), padding='same',
15
activation = keras.layers.PReLU(alpha_initializer='zeros',
16
alpha_regularizer=None,
17
alpha_constraint=None,
18
shared_axes=None), name='layer2')(x)
19
20
x = layers.GlobalAveragePooling2D(name='avg_pool')(x)
21
x = layers.Dropout(0.4)(x)
22
23
predictions = layers.Dense(CLASSES,
24
activation=tf.keras.activations.sigmoid)(x)
25
model = tf.keras.Model(inputs=base_model.input, outputs=predictions)
26
27
# transfer learning
28
for layer in base_model.layers:
29
layer.trainable = False
30
31
model.compile(optimizer='rmsprop',
32
loss='categorical_crossentropy',
33
metrics=['accuracy'])
34