说我有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_
答案 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]
})
BatchSize
索引然后np.roll
随机排列,超级简单的方法来迭代数据集而不用处理计算索引或不是偶数大小的尾随批次。