为Tensorflow

时间:2017-04-10 18:17:44

标签: tensorflow

说我有1000x500表,其中500是列和1000行。

行代表1000样本,每个样本由499 features和1个标签组成

如果我想放置这个张量流模型,并说每次我得到一批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 个答案:

答案 0 :(得分:1)

第一个问题:将您的batch_size维度作为您的第一个维度,这是标准,并且张量流中的相当数量的计算都假定为。

其次,我没有看到您的数据占位符X。但是你把它作为变量传递给sess.run。

为了简单起见,我建议你在tensorflow之外做所有这些重塑,使用numpy。不要误会我的意思,你绝对可以在tensorflow中做到这一点,但如果切片和合并让你感到困惑(他们第一次把所有人搞糊涂了),张量流只会增加这种混乱,因为你不能简单地打印切片操作的结果在张量流中很方便,你可以调整你的情况。

所以为此,让我们这样做:

# 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随机排列,超级简单的方法来迭代数据集而不用处理计算索引或不是偶数大小的尾随批次。