为什么tensorflow TFLiteConverter.from_会话要求输入和输出的大小相同
我正在尝试使用TFLiteConverter转换我的网络。所以我首先尝试了示例代码。它起作用了。但经过一些修改后,它会发回错误。似乎输入数组和输出数组的大小必须相同。我只是不明白为什么。有人能帮我吗 我将img的大小从修改为[1,64,64,3],将var的大小从[1,64,3,1]修改为[1,64,3,1] 完整的代码粘贴在下方为什么tensorflow TFLiteConverter.from_会话要求输入和输出的大小相同,tensorflow,tensorflow-lite,Tensorflow,Tensorflow Lite,我正在尝试使用TFLiteConverter转换我的网络。所以我首先尝试了示例代码。它起作用了。但经过一些修改后,它会发回错误。似乎输入数组和输出数组的大小必须相同。我只是不明白为什么。有人能帮我吗 我将img的大小从修改为[1,64,64,3],将var的大小从[1,64,3,1]修改为[1,64,3,1] 完整的代码粘贴在下方在此处输入代码 import tensorflow as tf img = tf.placeholder(name="img", dtype=tf.float32,
在此处输入代码
import tensorflow as tf
img = tf.placeholder(name="img", dtype=tf.float32, shape=(1, 64, 64, 1))
var = tf.get_variable("weights", dtype=tf.float32, shape=(1, 64, 3, 1))
val = tf.matmul(img,var)
out = tf.identity(val, name="out")
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(val.shape)
converter = tf.lite.TFLiteConverter.from_session(sess, [img], [out])
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
错误消息:
ValueError:对于输入形状为[1,64,64,1]、[1,64,3,1]的“MatMul”(op:“BatchMatMulV2”),维度必须相等,但为1和3。问题不在于TFLite转换,而在于首先构建图形
tf.matmul
对张量中最内层的2D矩阵进行运算。因此,在您的例子中,您试图将形状为64x1
的矩阵乘以大小为3x1
的矩阵,这是无效的。矩阵乘法要求第一个操作数的列等于第二个操作数的行,但此处 1!=3
所以它不起作用
例如,将3
替换为1
,则它将工作:
import tensorflow as tf
img = tf.placeholder(name="img", dtype=tf.float32, shape=(1, 64, 64, 1))
var = tf.get_variable("weights", dtype=tf.float32, shape=(1, 64, 3, 1))
val = tf.matmul(img,var)
out = tf.identity(val, name="out")