Конвертировать граф LSTM с ошибками TFLite
Люди, у меня возникает ошибка всякий раз, когда я пытаюсь конвертировать мой график LSTM в TFLite:
user@user:~/tensorflow/tensorflow$ bazel run --config=opt //tensorflow/contrib/lite/toco:toco -- --input_file=/home/user/model/rnn/lstm_graph_mobilnet_v2_100_128.pb --output_file=/home/user/model/rnn/lstm_graph_mobilnet_v2_100_128.tflite --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --inference_type=FLOAT --input_shape=1,10,2560 --input_array=input/x_input --output_array=output/y_pred
WARNING: ignoring http_proxy in environment.
.......................
WARNING: /home/user/.cache/bazel/_bazel_user/9944cfee49d745019014aac0edc80315/external/protobuf_archive/WORKSPACE:1: Workspace name in /home/user/.cache/bazel/_bazel_user/9944cfee49d745019014aac0edc80315/external/protobuf_archive/WORKSPACE (@com_google_protobuf) does not match the name given in the repository's definition (@protobuf_archive); this will cause a build error in future versions
INFO: Analysed target //tensorflow/contrib/lite/toco:toco (84 packages loaded).
INFO: Found 1 target...
Target //tensorflow/contrib/lite/toco:toco up-to-date:
bazel-bin/tensorflow/contrib/lite/toco/toco
INFO: Elapsed time: 88.490s, Critical Path: 35.68s
INFO: Build completed successfully, 1 total action
INFO: Running command line: bazel-bin/tensorflow/contrib/lite/toco/toco '--input_file=/home/user/model/rnn/lstm_graph_mobilnet_v2_100_128.pb' '--output_file=/home/users/model/rnn/lstm_graph_mobilnet_v2_100_128.tflite' '--input_format=TENSORFLOW_GRAPHDEF' '--output_format=TFLITE' '--inference_type=FLOAT' '--input_shape=1,10,2560' '--input_array=input/x_input' '--output_array=output/y_pred'
2018-07-10 16:38:59.794308: F tensorflow/contrib/lite/toco/tooling_util.cc:822] Check failed: d >= 1 (0 vs. 1)
Во время вывода размер пакета = 1, 10 входов, каждый вход имеет длину 2560
Почему мои размеры 0 в d >=1 (0 против 1)?
Какие-нибудь примеры проектов, которые конвертируют RNN в TFLite?
1 ответ
Я столкнулся с подобной проблемой, я использовал tflearn api в верхней части Tensorflow. При преобразовании модели тензорного потока в формат tflite я получил несколько ошибок.
Я переобучил модель, удалив выпадающий параметр из слоя lstm, и моя модель может быть преобразована в формат tflite.
Перед кодом:
net = tflearn.input_data(shape=[None, len(train_x[0])])
net = tflearn.embedding(net, input_dim=len(train_x[0]), output_dim=64)
net = tflearn.lstm(net, 16, dropout=0.4)
net = tflearn.fully_connected(net, len(train_y[0]), activation='softmax', name='output_layer')
net = tflearn.regression(net)
После кода:
net = tflearn.input_data(shape=[None, len(train_x[0])])
net = tflearn.embedding(net, input_dim=len(train_x[0]), output_dim=64)
net = tflearn.lstm(net, 16)
net = tflearn.fully_connected(net, len(train_y[0]), activation='softmax', name='output_layer')
net = tflearn.regression(net)
Но я не думаю, что удаление параметра dropout - это хорошая идея, это просто взлом. Если ваша модель работает хорошо без опции выпадения, то будет работать только этот хак.