如何将迭代器返回的张量的形状与tensorflow变量对齐

如何将迭代器返回的张量的形状与tensorflow变量对齐,tensorflow,dataset,Tensorflow,Dataset,这可能是一个非常简单的问题,但是我对tensorflow还是相当陌生的,并且一直在这个问题上纠缠不休。我使用tensorflow 1.12和python 3 我的问题是,设置迭代器返回的张量对象的形状的正确方法是什么 有了占位符,我可以让类似的代码工作,但我希望在没有占位符和使用tensorflow数据集的情况下工作 为了使用tf.matmul,我不知道如何将张量的形状与矩阵对齐 我收到的错误是:ValueError:Shape必须是秩2,但对于输入形状为[2]、[2,1]的“MatMul_19

这可能是一个非常简单的问题,但是我对tensorflow还是相当陌生的,并且一直在这个问题上纠缠不休。我使用tensorflow 1.12和python 3

我的问题是,设置迭代器返回的张量对象的形状的正确方法是什么

有了占位符,我可以让类似的代码工作,但我希望在没有占位符和使用tensorflow数据集的情况下工作

为了使用tf.matmul,我不知道如何将张量的形状与矩阵对齐

我收到的错误是:ValueError:Shape必须是秩2,但对于输入形状为[2]、[2,1]的“MatMul_19”(op:'MatMul'),它的秩1。

迭代器的数据集指定为:TensorSliceDataset形状:(2,),类型:tf.float32>

提前谢谢

import tensorflow as tf
import numpy as np

batch_size = 200

# this simulates a dataset read from a csv.....
x=np.array([[0., 0.], [1., 0.], [0., 1.], [1., 1.]],dtype="float32")
y=np.array([0, 0, 0, 1],dtype="float32")

dataset = tf.data.Dataset.from_tensor_slices((x))
print(dataset)                  # <TensorSliceDataset shapes: (2,), types: tf.float32>
dataset = dataset.repeat(10000)
print('repeat ds ', dataset)    # repeat ds  <RepeatDataset shapes: (2,), types: tf.float32>

iter = dataset.make_initializable_iterator()
print('iterator ', iter)        # iterator  <tensorflow.python.data.ops.iterator_ops.Iterator object at 0x0000028589C62550>

sess = tf.Session()
sess.run(iter.initializer)
next_elt= iter.get_next()

print('shape of dataset ', dataset , '[iterator] elt ', next_elt)  # shape of dataset  <RepeatDataset shapes: (2,), types: tf.float32> [iterator] elt  Tensor("IteratorGetNext_105:0", shape=(2,), dtype=float32)
print('shape of it ', next_elt.shape) #s hape of it  (2,)
for i in range(4):
    print(sess.run(next_elt))
    ''' outputs: 
    [0. 0.]
    [1. 0.]
    [0. 1.]
    [1. 1.]

    '''

w = tf.Variable(tf.random_uniform([2,1], -1, 1, seed = 1234),name="weights_layer_1")
# this is where the error is because of shape mismatch of iterator and w variable.
# How od I make the shape of the iterator (2,1) so that matmul can be used?
# What is the proper way of aligning a tensor shape with inut data
# The output of the error:
#     ValueError: Shape must be rank 2 but is rank 1 for 'MatMul_19' (op: 'MatMul') with input shapes: [2], [2,1].
H = tf.matmul( sess.run(next_elt) , w)
将tensorflow导入为tf
将numpy作为np导入
批量大小=200
#这将模拟从csv读取的数据集。。。。。
x=np.array([[0,0.],[1,0.],[0,1.],[1,1.],dtype=“float32”)
y=np.array([0,0,0,1],dtype=“float32”)
dataset=tf.data.dataset.from_张量_切片((x))
打印(数据集)#
数据集=数据集。重复(10000)
打印(“重复ds”,数据集)#重复ds
iter=dataset.make_initializable_iterator()
打印('iterator',iter)#迭代器
sess=tf.Session()
sess.run(iter.initializer)
下一个elt=iter.get_next()
打印(“数据集的形状”,数据集,“[iterator]elt”,next_elt)”数据集的形状[iterator]elt张量(“IteratorGetNext_105:0”,形状=(2,),数据类型=float32)
打印(‘它的形状’,下一个字母形状)#它的形状(2,)
对于范围(4)中的i:
打印(sess.run(next_elt))
''输出:
[0. 0.]
[1. 0.]
[0. 1.]
[1. 1.]
'''
w=tf.Variable(tf.random\u uniform([2,1],-1,1,seed=1234),name=“weights\u layer\u 1”)
#这是由于迭代器和w变量的形状不匹配导致的错误。
#我如何制作迭代器(2,1)的形状以便使用matmul?
#将张量形状与inut数据对齐的正确方法是什么
#错误的输出:
#ValueError:形状必须为秩2,但对于输入形状为[2],[2,1]的“MatMul_19”(op:'MatMul'),形状必须为秩1。
H=tf.matmul(sess.run(下一次测试),w)

您可以使用tf.reformate。只需在matmul操作之前添加
tf.重塑(下一步[1,2])

有关重塑的详细信息

您可以使用tf.reforme。只需在matmul操作之前添加
tf.重塑(下一步[1,2])

有关重塑的更多信息

谢谢!这就是我需要的。在宣布下一次英语教学后,我添加了next_elt=tf.reforme(next_elt[1,2]),它很有效。谢谢!这就是我需要的。我在宣布下一次英语教学后添加了next_elt=tf.reforme(next_elt[1,2]),它起作用了。