【问题标题】:Strange dimension behaviour: needs both dimension 2 and 3 unsure why奇怪的维度行为:需要维度 2 和维度 3 不确定为什么
【发布时间】:2020-01-21 16:30:57
【问题描述】:

我正在尝试将一个简单的模型转换为 TFLite 并遇到以下尺寸问题。

我已经尝试使用 perm=[1,0] 和 perm=[0,2,1] 第一个会产生需要 3 个维度的错误,第二个会产生一个需要 2 个维度的错误。

import tensorflow as tf

captions = tf.keras.layers.Input(shape=[5,1024], name='captions')
cap_i = tf.keras.layers.Lambda(lambda q: q[0][:5,:])([captions])
cap_iT = tf.keras.layers.Lambda(lambda query:tf.transpose(query, 
perm=[0,2,1]))(cap_i)
model = tf.keras.models.Model(inputs=[captions], outputs=[cap_iT])
model.save('my_model.hd5')
converter = 
tf.lite.TFLiteConverter.from_keras_model_file('my_model.hd5')
tflite_model = converter.convert()
open("converted_modelfile.tflite", "wb").write(tflite_model)

ValueError:维度必须为 2,但对于输入形状为 [5,1024]、[3] 的“lambda_1/transpose”(操作:“Transpose”)为 3。

【问题讨论】:

    标签: tensorflow keras tf.keras


    【解决方案1】:

    找到了一种使用 TFLite 中的兼容操作修复输入的好方法。

    import tensorflow.compat.v1 as tf
    import numpy as np
    
    tf.disable_v2_behavior()
    initial_input = tf.placeholder(dtype=tf.float32, shape=(None,5,1024))
    cap_i = tf.strided_slice(initial_input, [0,0,0], [0,5,1024], [1,1,1], shrink_axis_mask=1)
    cap_i_reshaped =tf.reshape(cap_i,[1,5,1024])
    cap_iT = tf.transpose(cap_i_reshaped, perm=[0,2,1])
    
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())
    tf.io.write_graph(sess.graph_def, '', 'train.pbtxt')
    converter = tf.lite.TFLiteConverter.from_session(sess, [initial_input], [cap_iT])
    converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS, 
    tf.lite.OpsSet.SELECT_TF_OPS]
    tflite_model = converter.convert()
    open('converted_model.tflite', "wb").write(tflite_model)
    sess.close()
    

    【讨论】:

      【解决方案2】:

      您可能在两个不同的地方遇到错误。

      您正在用q[0] 丢弃第一个Lambda 中的批量大小维度。您不应该这样做,您将需要 Keras 模型末尾的批处理维度(可能是其他错误的位置)。尽管您在列表中传递[captions],但它可能会自动获取列表中的元素,因为它是单个张量。

      您问题中的消息肯定在第二个Lambda 中,其中您有一个具有二维[5,1024] 的张量(因为您在第一个Lambda 中丢弃了批量大小)并且您正在尝试置换3尺寸与[0,2,1]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多