Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

A error when using tfmot.quantization.keras.quantize_model to quantize keras model

Open
#1,031 2 comments 0 reactions 1 assignee View on GitHub

@lenscloth is already working on this.

Since Jan 11, 2023.

Assessment

This issue has not been assessed yet.

Description

bug

Describe the bug
When quantizing the keras model after pruning, an error is reported as follows.

RuntimeError: Layer conv1d:<class 'tensorflow.python.keras.layers.convolutional.Conv1D'> is not supported. You can quantize this layer by passing a tfmot.quantization.keras.QuantizeConfig instance to the quantize_annotate_layer API.

Dose fmot.quantization.keras.quantize_model not support 1DCNN?

System information

TensorFlow version (installed from source or binary): tf=2.4.1

TensorFlow Model Optimization version (installed from source or binary): tensorflow_model_optimization==0.5.0

Python version: python==3.6.9

Code to reproduce the issue
LOGGER.info(f"starting")
prune_low_magnitude = tfmot.sparsity.keras.prune_low_magnitude
pruning_params = {'pruning_schedule':
tfmot.sparsity.keras.ConstantSparsity(target_sparsity=0.30,begin_step=0,end_step=-1)}
LOGGER.info(f"pruning")
self._model = prune_low_magnitude(self._model, **pruning_params)
LOGGER.info(f"compiling")
self._model.compile(loss='categorical_crossentropy', optimizer='Adam', metrics=["accuracy"])
LOGGER.info(f"fitting")
history=self._model.fit(x=data, epochs=8, verbose=1, shuffle=True, callbacks=callbacks)
LOGGER.info(f"striping")
self._model = tfmot.sparsity.keras.strip_pruning(self._model)
LOGGER.info(f"quantizing")
quantize_model = tfmot.quantization.keras.quantize_model
self._model = quantize_model(self._model)
LOGGER.info(f"compiling")
self._model.compile(loss='categorical_crossentropy', optimizer='Adam', metrics=["accuracy"])
LOGGER.info(f"fitting")
history = self._model.fit(x=data, epochs=2, verbose=1, shuffle=True, callbacks=callbacks)

tf. keras model
import tensorflow as tf

inputs = tf.keras.Input(shape=(58,))
x=tf.keras.layers.Reshape((58,1))(inputs)

x = tf.keras.layers.Conv1D(8, 1,strides=1,padding='same')(x)
x=tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.Activation('relu')(x)

x1 = tf.keras.layers.Conv1D(16, 1,strides=1,padding='same',dilation_rate=3)(x)
x2 = tf.keras.layers.Conv1D(16, 3,strides=1,padding='same',dilation_rate=3)(x)

x1=tf.keras.layers.BatchNormalization()(x1)
x2=tf.keras.layers.BatchNormalization()(x2)

x1 = tf.keras.layers.Activation('relu')(x1)
x2 = tf.keras.layers.Activation('relu')(x2)

x=tf.keras.layers.Concatenate(-1)([x1,x2])

x = tf.keras.layers.Conv1D(16, 1,strides=1,padding='same')(x)
x=tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.Activation('relu')(x)

x1 = tf.keras.layers.Conv1D(32, 1,strides=1,padding='same',dilation_rate=3)(x)
x2 = tf.keras.layers.Conv1D(32, 3,strides=1,padding='same',dilation_rate=3)(x)

x1=tf.keras.layers.BatchNormalization()(x1)
x2=tf.keras.layers.BatchNormalization()(x2)

x1 = tf.keras.layers.Activation('relu')(x1)
x2 = tf.keras.layers.Activation('relu')(x2)

x=tf.keras.layers.Concatenate(-1)([x1,x2])

x = tf.keras.layers.Conv1D(32, 1,strides=1,padding='same')(x)
x=tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.Activation('relu')(x)

x1 = tf.keras.layers.Conv1D(64, 1,strides=1,padding='same',dilation_rate=3)(x)
x2 = tf.keras.layers.Conv1D(64, 3,strides=1,padding='same',dilation_rate=3)(x)

x1=tf.keras.layers.BatchNormalization()(x1)
x2=tf.keras.layers.BatchNormalization()(x2)

x1 = tf.keras.layers.Activation('relu')(x1)
x2 = tf.keras.layers.Activation('relu')(x2)

x=tf.keras.layers.Concatenate(-1)([x1,x2])

x=tf.keras.layers.Dropout(0.5)(x)

x = tf.keras.layers.Conv1D(128, 4,strides=1,padding='same')(x)
x=tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.Activation('relu')(x)

x_shortcut=x

x = tf.keras.layers.Conv1D(128, 1,strides=1,padding='same')(x)
x=tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.Activation('relu')(x)

x=tf.keras.layers.SeparableConv1D(128,2,strides=1,padding='same')(x)
x=tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.Activation('relu')(x)

se_x = x
se_x=tf.keras.layers.GlobalAveragePooling1D()(se_x)
se_x =tf.keras.layers.Dense(128)(se_x)
se_x= tf.keras.layers.Activation('relu')(se_x)
se_x= tf.keras.layers.Multiply()([x,se_x])
x = tf.keras.layers.add([x,se_x])
x = tf.keras.layers.Activation('relu')(x)

x = tf.keras.layers.add([x,x_shortcut])
x = tf.keras.layers.Activation('relu')(x)

x=tf.keras.layers.GlobalAveragePooling1D()(x)
x=tf.keras.layers.Dropout(0.5)(x)
x =tf.keras.layers.Dense(7)(x)
pred = tf.keras.layers.Activation('softmax')(x)
model = tf.keras.Model(inputs=inputs, outputs=pred)
model.summary()
print(model.to_json())

Dominant language
Python
Stars
1.6k
Forks
349
PR merge metrics
No merged PRs in 30d

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from tensorflow/model-optimization

All issues in tensorflow/model-optimization

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.