3
votes

I have tried to convert following keras model into tflite for hosting in a mobile platform using the following code. I have installed tensorflow version=1.12 python version=3.6.7 keras version=2.2.4 When I have run this code, I have got following error.

converter = tf.lite.TFLiteConverter.from_keras_model_file(keras_file) AttributeError: module 'tensorflow' has no attribute 'lite'

What could be the reason for this error and how to solve it?

from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras import backend as K
import tensorflow as tf

# dimensions of our images.
img_width, img_height = 150, 150

train_data_dir = 'D:\\My Projects\\Dataset\\dataset6_2clz\\train'
validation_data_dir = 'D:\\My Projects\\Dataset\\dataset6_2clz\\validation'



nb_train_samples = 75
nb_validation_samples = 50
#epochs = 50
#batch_size = 16
epochs = 5
batch_size = 4

if K.image_data_format() == 'channels_first':
    input_shape = (3, img_width, img_height)
else:
    input_shape = (img_width, img_height, 3)

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])



train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)


test_datagen = ImageDataGenerator(rescale=1. / 255)

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='binary')

model.fit_generator(
    train_generator,
    steps_per_epoch=nb_train_samples // batch_size,
    epochs=epochs,
    validation_data=validation_generator,
    validation_steps=nb_validation_samples // batch_size)


# Save tf.keras model in HDF5 format.
keras_file = "7_try.h5"
model.save('7_try.h5')


# Convert to TensorFlow Lite model.

converter = tf.lite.TFLiteConverter.from_keras_model_file(keras_file)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
1
is it possible that your file or any other file in the same folder is named tensorflow.py? - buran
@buran there is no file named as tensorflow.py - Lakwin Chandula

1 Answers

4
votes

In tensorflow 1.12 it should be converter = tf.contrib.lite.TFLiteConverter.from_keras_model_file(keras_file)

see https://www.tensorflow.org/lite/convert/python_api#pre_tensorflow_1.12 I guess you read following reference https://www.tensorflow.org/lite/convert/python_api, but pay attention to following note

Note: These docs describe the converter in the TensorFlow nightly release, installed using pip install tf-nightly. For docs describing older versions reference "Converting models from TensorFlow 1.12".

In addition, for more information you can see this commit message https://github.com/tensorflow/tensorflow/commit/61c6c84964b4aec80aeace187aab8cb2c3e55a72