2017-04-10 50 views
0

假设我有1000x500表,其中500是列和1000行。为Tensorflow生成输入标签

而行表示1000样品,每个样品由499 features和1标签

如果我想把这个tensorflow模型,并说,每一次我得到了一批20 samples

......................................... 
inputdata #is filled and has a shape of 499x1000 
inputlabel #is filled and has a shape of 1x1000 

y_ = tf.placeholder(tf.float32,[None,batchSize],name='Labels') 
for j in range(numberOfRows/BatchSize): 
    sess.run(train_step,feed_dict={x:batch_xs[j],y_:np.reshape(inputlabel[j] ,(batchSize,1))})) 

所以我一直试图运行我的code两天没有任何成功,所以我会感谢任何帮助考虑y_和重塑部分。我的问题是要了解,当我读取一批20 data行时,我应该如何塑造标签Y_

回答

1

第一个问题:将您的batch_size维度作为您的第一维,这是标准和相当数量的计算在张量流中承担尽可能多的。

其次,我没有看到您的数据的占位符,X。但是你把它作为变量传给sess.run。为了保持简单,我建议你做所有这些在tensorflow之外重塑,使用numpy。不要误解我的意思,你可以在张量流中完全做到这一点,但如果切片和合并让你感到困惑(他们第一次让所有人感到困惑),张量流只会增加混淆,因为你不能简单地打印出结果在tensorflow中方便地切割操作,就像在numpy中调试您的情况一样。

因此,为了这个目的,让我们做吧:

# your data 
mydata = np.random.rand(500,1000) 

# tensorflow placeholders 
X = tf.placeholder(tf.float32, [batchSize, 499], name='X') 
y_ = tf.placeholder(tf.float32, [batchSize, 1], name=y_') 

# let's transpose your data so the batch is the first dimension (1000 x 500) 
mydata = mydata.T 

# Let's split the labels from the data 
data = mydata[:,0:499] 
labels = mydata[:,500] 

# Now train 
for j in range(numOfRows/BatchSize): 
    row_from = j * BatchSize 
    row_to = j * BatchSize + BatchSize 
    sess.run(train_step, feed_dict={ 
       x : data[row_from:row_to, :] 
       y_ : labels[row_from:row_to] 
    }) 
  • 不要忘记置换您的数据,我们没有做到这一点在这里。我个人喜欢np.random.permutation(1000)来获得一个随机的索引列表,然后只需要第一个BatchSize索引,然后np.roll随机排列,超级简单的方式来遍历数据集而不处理计算索引或尾部批次这不是一个均匀的大小。
+0

感谢您的回答,但我仍然想念班级的数量,说11班,哪里告诉培训师你有多少班? – Engine

+0

啊!我的答案假设了一个二元类。如果你有两个以上的课程,你需要将你的y_标签改为一个热门的编码。因此,类3可以由向量'[0 0 1 0 0 0 0 0 0 0 0]'表示。例如,将标签从类“3”更改为“[0 0 1 0 0 0 0 0 0 0 0]”,对于其他类也是如此。然后你的标签数据将有维度11.看到这个问题:http://stackoverflow.com/questions/29831489/numpy-1-hot-array –

+0

感谢您的帮助,但我应该在哪里使用placeOf中的numberOfclasses for ex。 Y_? – Engine