Tensorflow:基于输入创建向量

时间:2019-06-10 08:58:54

标签: python tensorflow keras

我对Tensorflow并没有真正的经验,我正在做一件看似很容易的事情,但是却陷入其中。

我需要使用张量流层创建一个给定输入的矩阵。 这是我得到的:

def createTransformationMatrix(args):
    scale = args[0]
    M = tf.Variable([scale[0], 0, 0, 0, scale[1], 0, 0, 0], dtype=tf.float32)
    return  M

scaleValue = Input(shape=(2,));
createTransfMatrix = Lambda(createTransformationMatrix)(scaleValue)
transformImage = Model([scaleValue], createTransfMatrix, name='transformImage');
scaleValueInput = np.array([1.0,1.0])
output = transformImage.predict(scaleValueInput[None,:])

出现错误:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'lambda_1/Placeholder' with dtype float and shape [?,2]
     [[Node: lambda_1/Placeholder = Placeholder[dtype=DT_FLOAT, shape=[?,2], _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

1 个答案:

答案 0 :(得分:1)

您可以使用tensorflow

scaleValue = tf.placeholder("float32", 2)
b = tf.expand_dims(scaleValue, axis=1)
c = tf.constant([[1,0,0,0]], 'float32')
d = tf.matmul(b,c)
res = tf.reshape(d, shape=[-1])

with tf.Session() as sess:
    print (sess.run([res], feed_dict={scaleValue: np.array([1,3])}))

输出

[array([1., 0., 0., 0., 3., 0., 0., 0.], dtype=float32)]


使用填充的解决方案

scaleValue = tf.placeholder("float32", 2)
a = tf.expand_dims(scaleValue, axis=1)
paddings = tf.constant([[0, 0,], [0, 3]])
b = tf.pad(a, paddings, "CONSTANT")
res = tf.reshape(b, shape=[-1])


with tf.Session() as sess:
    print (sess.run([res], feed_dict={scaleValue: np.array([1,3])}))

将填充设置为所需形状的恒定值

paddings = tf.constant([[top, bottom,], [left, right]])中,top, bottom, left, right代表相应位置中的No:of零。