为Tensorflow整形输入标签

为Tensorflow整形输入标签,tensorflow,Tensorflow,假设我有1000x500表,其中500是列和1000行 行代表1000样本,每个样本由499个特征和1个标签组成 如果我想把这个tensorflow模型和,假设每次我得到一批20个样本: ......................................... inputdata #is filled and has a shape of 499x1000 inputlabel #is filled and has a shape of 1x1000 y_ = tf.placehol

假设我有
1000x500
表,其中
500
是列和1000行

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

如果我想把这个tensorflow模型和,假设每次我得到一批
20个样本

.........................................
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) )}))

因此,我已经试着运行了两天,但没有任何成功,因此我非常感谢您在考虑
y\uu
和重塑零件时提供的任何帮助。我要理解的问题是,当我阅读一批
20数据
行时,我应该如何塑造标签
Y

第一个问题:将批次大小维度作为第一个维度,这是标准,tensorflow中的大量计算都假设了这一点

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

为了保持简单,我建议您在tensorflow之外进行所有这些重塑,使用numpy。不要误解我的意思,你完全可以在tensorflow中这样做,但是如果切片和合并让你感到困惑(他们第一次把每个人都弄糊涂了),tensorflow只会让你更加困惑,因为你不能简单地在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
    随机排列,这是一种非常简单的方法,可以迭代数据集,而无需处理计算索引或大小不均匀的后续批

第一期:将批量大小维度作为第一个维度,这是标准,tensorflow中的大量计算都假设了这一点

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

为了保持简单,我建议您在tensorflow之外进行所有这些重塑,使用numpy。不要误解我的意思,你完全可以在tensorflow中这样做,但是如果切片和合并让你感到困惑(他们第一次把每个人都弄糊涂了),tensorflow只会让你更加困惑,因为你不能简单地在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
    随机排列,这是一种非常简单的方法,可以迭代数据集,而无需处理计算索引或大小不均匀的后续批

谢谢你的回答,但我仍然错过了课程的数量,比如说11节课。你在哪里告诉培训师你有多少节课?啊!我的答案是假设一个二进制类。如果您有两个以上的类,则需要将y_uuu标签更改为一个热编码。因此,类3可以用向量
[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
表示。例如,将标签从类别
3
更改为
[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
,对于其他类别也是如此。然后标签数据将具有维度11。查看此问题:感谢您的帮助,但是我应该在哪里使用占位符中的numberOfclasses for ex.Y_?您的
Y_
占位符应该是这样的,共有11个类:
Y_=tf.placeholder(tf.float32,[batchSize,11],name='y'
,您的输入当然会匹配这些维度。您当然需要将标签转换为我之前评论中的链接中所述的一种热门格式。感谢您的回答,但我仍然错过了课程数,比如11个课程,您在哪里告诉培训师您有多少个课程?啊!我的答案假设为二进制类别s、 如果您有两个以上的类,则需要将y_uuu标签更改为一个热编码。因此,类3可以由向量
[0 0 1 0 0 0 0 0 0 0 0 0 0]
表示。例如,将标签从类
3
更改为
[0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
,对于其他类也是如此。那么您的标签数据将具有维度11。请参见以下问题:谢谢您的帮助,但是我应该在何处使用占位符中的numberOfclasses for ex.Y_?您的
Y_
占位符应该与以下11个类类似:
Y=tf.placeholder(tf.float32,[batchSize,11],name='y'
,您的输入当然会匹配这些维度。您当然需要将标签转换为我上一篇评论中的链接中所述的一种热格式。