【发布时间】:2019-05-27 09:27:54
【问题描述】:
错误: 原因:java.lang.IllegalArgumentException:无法在 FLOAT32 类型的 TensorFlowLite 张量和 java.lang.String 类型的 Java 对象(与 TensorFlowLite 类型 STRING 兼容)之间进行转换。
我已经从我的数据集构建了一个神经网络并有 2 层,然后我将模型保存为 h5,然后使用 tf.keras 模型和转换将其转换为 tflite,但是当我将它部署到应用程序中时,它给了我上述信息错误
我尝试过输入很多类型的数组和数组列表
错误: 原因:java.lang.IllegalArgumentException:无法在 FLOAT32 类型的 TensorFlowLite 张量和 java.lang.String 类型的 Java 对象(与 TensorFlowLite 类型 STRING 兼容)之间进行转换。
model.add(layers.Dense(500, input_dim=3, activation='relu'))
model.add(layers.Dense(1, activation= "relu"))
model.summary() #Print model Summary
model.compile(loss='mean_squared_error',optimizer='adam')
model.fit(X_train,Y_train,epochs=1000,validation_split=0.3)
我如何转换:-
from tensorflow.contrib import lite
converter = lite.TFLiteConverter.from_keras_model_file( 'Model.h5')
tfmodel = converter.convert()
open ("model.tflite" , "wb") .write(tfmodel)
安卓实现
ArrayList<String> list = new ArrayList<>();
list.add("-0.5698444");
list.add("-0.57369368");
list.add("-1.31490297");
try (Interpreter interpreter = new Interpreter(mappedByteBuffer)) {
interpreter.run(list, "output");
}
private MappedByteBuffer loadModelFile() throws IOException {
AssetFileDescriptor fileDescriptor = getAssets().openFd("model.tflite");
FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
FileChannel fileChannel = inputStream.getChannel();
long startOffset = fileDescriptor.getStartOffset();
long declaredLength = fileDescriptor.getDeclaredLength();
return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);
}
【问题讨论】:
-
如果您发布用于在 Java 中加载 TFLite 模型中的数据的代码将会很有帮助。
-
嗨,我已经添加了那部分
标签: java android python-3.x tensorflow