'Which Java class is compatible with python Pandas DataFrame when using DJL(Deep Java Library)?
I'm trying to import Python Tensorflow custom model to spring-boot
using DJL Tensorflow
, and the model gets Pandas DataFrame
as both input and output.
I'm wondering if there is any particular table or dataFrame class that is applicable for Criteria<I, O> and ZooModel<I, O> since there is only Image class from ai.djl.modality.cv.Image
in example codes.
If there is, is the class compatible with Pandas DataFrame
? There are some codes that I wrote and error messages below.
I've already tried tablesaw.api.Table
and apache.spark.sql.Dataset
but it did not work. If you know any information about it, please let me know.
conditions
- Input class
I
and Output classO
should be equivalent toPandas DataFrame
- This class should be applicable for
Criteria<I, O>
andZooModel<I, O>
codes
Criteria<I, O> criteria = Criteria.builder()
.setTypes(I.class, O.class) // defines input and output data type
.optModelUrls("../model/mlpDemo/") // search models in specified path
.build();
try (ZooModel<I, O> model = criteria.loadModel();
Predictor<I, O> predictor = model.newPredictor();) {
O result = predictor.predict(dataFrame); // here should be loaded dataFrame
System.out.print(result);
} catch (Exception e) {
e.printStackTrace();
}
error messages
ai.djl.repository.zoo.ModelNotFoundException: No matching model with specified Input/Output type found.
at ai.djl.repository.zoo.Criteria.loadModel(Criteria.java:186)
at com.example.demo.DemoApplication.main(DemoApplication.java:69)
Caused by: ai.djl.repository.zoo.ModelNotFoundException: No matching default translator found. The valid input and output classes are:
(ai.djl.ndarray.NDList, ai.djl.ndarray.NDList)
at ai.djl.repository.zoo.BaseModelLoader.loadModel(BaseModelLoader.java:97)
at ai.djl.repository.zoo.Criteria.loadModel(Criteria.java:174)
... 1 more
Solution 1:[1]
You need create your own Translator
to convert DataFrame
into NDList
:
class MyTranslator implements NoBatchifyTranslator<DataFrame, Classifcations> {
@Override
public NDList processInput(TranslatorContext ctx, DataFrame input) {
// convert DataFrame columns into NDArrays
NDArray col1 = ...
NDArray col2 = ...
return new NDList(col1, col2);
}
/** {@inheritDoc} */
@Override
public Classifications processOutput(TranslatorContext ctx, NDList list) {
// implement your post processing
return new Classifications();
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Frank Liu |