Tensorflow 不训练:'DataFrame' 对象是可变的,因此它们不能被散列

Tensorflow doesn't train: 'DataFrame' objects are mutable, thus they cannot be hashed

我想在 kaggle 数据集 'House Prices' 上使用 tensorflow 构建和训练一个神经网络(但没有 Keras,在 Keras 上我可以正常工作) .我使用 Python,除了实际训练之外,我的代码 运行 没问题。但是,在训练时,我要么没有错误(但没有训练),要么得到 TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed.

我 运行 在 ipynotebook 中 Google 的 colab 上的脚本,我认为主要问题在于输入 feed_dict。但是,我不知道这里出了什么问题。 batch_X 包含 100x10 个特征,batch_Y100 个标签。我想这可能是关键片段:

train_data = { X: batch_X, Y_:batch_Y }

train_data 是我喂给 sess.run(train_step, feed_dict=train_data")

这是我的代码:https://colab.research.google.com/drive/1qabmzzicZVu7v72Be8kljM1pUaglb1bY

# train and train_normalized are the training data set (DataFrame)
# train_labels_normalized are the labels only

#Start session:
with tf.Session() as sess:
  sess.run(init)

  possible_indeces = list(range(0, train.shape[0]))
  iterations = 1000
  batch_size = 100

  for step in range(0, iterations):
    #draw batch indeces:
    batch_indeces = random.sample(possible_indeces, batch_size)
    #get features and respective labels
    batch_X = np.array(train_normalized.iloc[batch_indeces])
    batch_Y = np.array(train_labels_normalized.iloc[batch_indeces])

    train_data = { X: batch_X, Y_: batch_Y}

    sess.run(train_step, feed_dict=train_data)

我希望的是它会 运行 几分钟,并且 return 具有优化的权重(2 个隐藏层,每个层有 48 个节点)让我做出预测。但是,它只是跳过了上面的代码或者抛出了下面的错误。

有人知道哪里出了问题吗?

TypeError Traceback (most recent call last)
<ipython-input-536-79506f90a868> in <module>()
     13     batch_Y = p.array(train_labels_normalized.iloc[batch_indeces])
     14 
---> 15     train_data = { X: batch_X, Y_: batch_Y}
     16 
     17     sess.run(train_step, feed_dict=train_data)

  /usr/local/lib/python3.6/dist-packages/pandas/core/generic.py in __hash__(self)

   1814  def __hash__(self):
   1815  raise TypeError('{0!r} objects are mutable, thus they cannot be'
-> 1816     ' hashed'.format(self.__class__.__name__))
   1817
   1818     def __iter__(self):

  TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed

问题出在您的第七(测试)步骤。

#Set X to the test data
X = test_normalized.astype(np.float32)
print(type(X)) # **<class 'pandas.core.frame.DataFrame'>**
Y1 = tf.nn.sigmoid(tf.matmul(X, W1))
Y2 = tf.nn.sigmoid(tf.matmul(Y1, W2))
Y3 = tf.matmul(Y2, W3)

您正在将 X 设置为 DataFrame。在第一个 运行 这不会影响任何东西。但是,当您 运行 第七步之后的第六步时,您会 运行 遇到这个问题,因为您已经覆盖了 X.

的内容

尝试将 X 更改为 X_:

X_ = test_normalized.astype(np.float32)
Y1 = tf.nn.sigmoid(tf.matmul(X_, W1))

此外,您的最终评估无效。把它变成 tf.Session.