Android studio Can';t使用kotlin从android studio内的tensorflow lite模型中提取有意义的完整输出
我正在尝试将一个模型集成到android应用程序中 模型由以下行定义:Android studio Can';t使用kotlin从android studio内的tensorflow lite模型中提取有意义的完整输出,android-studio,kotlin,tensorflow-lite,Android Studio,Kotlin,Tensorflow Lite,我正在尝试将一个模型集成到android应用程序中 模型由以下行定义: model = Sequential() model.add(Conv2D(filters=32, kernel_size=(5, 5), padding='Same', activation='relu', input_shape=(150, 150, 3))) model.add(MaxPooling2D(pool_size=(2, 2))) #additional layers model.add(Conv2D(f
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(5, 5), padding='Same', activation='relu', input_shape=(150, 150, 3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
#additional layers
model.add(Conv2D(filters=96, kernel_size=(3, 3), padding='Same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dense(NUMBER_OF_FLOWERS, activation="softmax"))
#additional line skipped
model.compile(optimizer=Adam(lr=0.001),loss='categorical_crossentropy',metrics=['accuracy'])
tf.saved_model.save(model, model_train_path)
import tensorflow as tf
# Convert the model
converter = tf.lite.TFLiteConverter.from_saved_model(model_train_path) # path to the SavedModel directory
tflite_model = converter.convert()
然后,我用以下行保存了模型:
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(5, 5), padding='Same', activation='relu', input_shape=(150, 150, 3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
#additional layers
model.add(Conv2D(filters=96, kernel_size=(3, 3), padding='Same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dense(NUMBER_OF_FLOWERS, activation="softmax"))
#additional line skipped
model.compile(optimizer=Adam(lr=0.001),loss='categorical_crossentropy',metrics=['accuracy'])
tf.saved_model.save(model, model_train_path)
import tensorflow as tf
# Convert the model
converter = tf.lite.TFLiteConverter.from_saved_model(model_train_path) # path to the SavedModel directory
tflite_model = converter.convert()
我可以在android studio项目中加载模型,
并尝试了以下几行
val model = Model.newInstance(this)
val inputFeature0 = TensorBuffer.createFixedSize(intArrayOf(1, 150, 150, 3), DataType.FLOAT32)
val bytebuffer = ByteBuffer.allocate(270000)
bytebuffer.put(image)
inputFeature0.loadBuffer(bytebuffer)
#the following lines are some attemps I did to extract the outputs
val outputs = model.process(inputFeature0)
val t = outputFeature0.floatArray
t是一个具有正确输出形状(20)的向量,只包含NaN值。
我希望得到一个概率向量
在过去的两周里,我没有找到解决这个问题的办法。
另外,我不确定问题是否在于网络的定义(python代码),
或者是科特林的东西
谢谢 你能先核实一下你的TF图是否有效吗?如果TF图工作正常,则可以在Python层中验证转换后的TFLite模型是否工作正常。我还建议检查上述示例中的输入是否正确生成。