重塑错误张量流RNN

时间:2017-07-14 20:40:40

标签: python machine-learning tensorflow

我无法解决我的代码问题。运行代码时,我不断收到以下错误消息:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-1-cdb1929785d0> in <module>()
    108         tf.reset_default_graph()
    109 
--> 110 train_neural_network(x)

<ipython-input-1-cdb1929785d0> in train_neural_network(x)
     93                 end = i+batch_size
     94                 batch_x = np.array(X_train[start:end])
---> 95                 batch_x = batch_x.reshape((batch_size,n_chunks,chunk_size))
     96                 batch_y = np.array(y_1Hot_train.eval()[start:end])
     97 

ValueError: cannot reshape array of size 784 into shape (10,28,28)

我的数据集是一个(88041,784)数组,其中我的批量大小为10.当我取第95行并独立运行时,我没有收到任何错误,重新整形就会发生。

例如在tensorflow之外,此代码段起作用:

batch_x = np.array(X_train[0:10])
batch_x = batch_x.reshape((batch_size,n_chunks,chunk_size))
batch_x.shape # returns a shape of (10, 28, 28)

所以我不确定为什么tensorflow不断抛出错误。如果您有更好的想法,我会非常感激。

tf.sessions部分是:

 with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for epoch in range (hm_epochs):
        epoch_loss = 0
        itere = int(X_train.shape[0]/batch_size)
        last = 0
        add = 1
        batch_size = 10
        i=0
        while i < len(X_train):
            start = i
            end = i+batch_size
            batch_x = np.array(X_train[start:end])
            batch_x = batch_x.reshape((batch_size,n_chunks,chunk_size))
            batch_y = np.array(y_1Hot_train.eval()[start:end])

            _, c = sess.run([optimizer, cost], feed_dict={x: batch_x,
                                                          y: batch_y})
            epoch_loss += c
            i+=batch_size
        sess_end = time.time() - start_time

代码在这里:https://gist.github.com/makark/bab1cd6a80667226d0aff35f637463b0

3 个答案:

答案 0 :(得分:1)

我解决了这个问题,似乎问题是我使用的是大小为(88041,784)的数据集,10(batch_Size)无法平均分析。似乎在循环的最后一次迭代中,1个样本被遗留并导致错误。我从X_train中删除了最后一个样本,现在它可以工作......

答案 1 :(得分:0)

你没有提供正确的数据批量,数据的大小784,但为了形成(10,28,28),你需要有7840,所以还有10个例子(我猜你发布的是什么)。< / p>

我的猜测是你正在喂X_train[0]

答案 2 :(得分:0)

我建议您在进入训练循环之前重塑X_train,而不是在每批次中重塑:

...
X = X1.values.astype(np.float32)
X = X.reshape(-1, 28, 28)
...

如果您想将训练数据视为28x28矩阵,那么尽快进行重塑是有意义的。它还可以使调试变得更容易。