Dear Matlab community,
I'm trying to import a model that was trained using tensorflow/keras (see model.h5 in attachment, had to zip it) into Matlab using the importKerasNetwork function, but receive the error below. The model was trained in keras using a self-defined custom loss function and I think this is the part where the matlab import goes wrong: when I train the exact same model with a standard mse error, it imports perfectly...
>> net = importKerasNetwork('model.h5');
Warning: File 'model.h5' was saved in Keras version '2.4.0'. Import of Keras versions newer than '2.2.4' is not supported. The imported model may not
exactly match the model saved in the Keras file.
Warning: Loss function 'mixed_grad_loss_099' is not supported.
Error using assembleNetwork (line 47)
Invalid network.
Error in nnet.internal.cnn.keras.importKerasNetwork (line 35)
Network = assembleNetwork(LayersOrGraph);
Error in importKerasNetwork (line 91)
Network = nnet.internal.cnn.keras.importKerasNetwork(modelfile, varargin{:});
Caused by:
Network: Missing output layer. The network must have at least one output layer.
Layer 'conv2d_87_OutputLayer_PLACEHOLDER': Unconnected output. Each layer output must be connected to the input of another layer.
Layer 'conv2d_87_OutputLayer_PLACEHOLDER': Layer validation failed. Error using 'forward' in Layer nnet.keras.layer.PlaceholderOutputLayer. The
function threw an error and could not be executed.
Error using nnet.internal.cnn.layer.util.CustomLayerLegacyStrategy/forward (line 42)
Networks containing PlaceholderLayers cannot be trained or used for prediction. Either remove or replace all PlaceholderLayers.
Note that importKerasLayers works perfectly and gives the following prompt in Matlab:
>> importKerasLayers('model.h5')
Warning: File 'model.h5' was saved in Keras version '2.4.0'. Import of Keras versions newer than '2.2.4' is not supported. The imported model may not
exactly match the model saved in the Keras file.
Warning: Loss function 'mixed_grad_loss_099' is not supported.
Warning: Keras network has multiple outputs and does not include loss information specifying the output layer types. importKerasLayers inserts
placeholder layers for the outputs. Find and replace the layers by using findPlaceholderLayers and replaceLayer, respectively.
ans =
LayerGraph with properties:
Layers: [47×1 nnet.cnn.layer.Layer]
Connections: [49×2 table]
InputNames: {'input_11'}
OutputNames: {1×0 cell}
Any ideas on how to bypass this behaviour so I can import my network into Matlab and perform inference there would be greatly appreciated!
Best,
Sam
0 Comments
Sign in to comment.