【问题标题】:Issue of feeding in feed_dict (Tensorflow)feed_dict (Tensorflow) 中的喂食问题
【发布时间】:2017-03-21 13:10:36
【问题描述】:

我的 raw_data 是 PTB 数据集。 我正在通过以下代码生成批次。

def generate_batches(raw_data, batch_size, unrollings):
  global data_index
  data_len = len(raw_data)
  num_batches = data_len // batch_size
  inputs = []
  labels = []
  print (num_batches, data_len, batch_size)
  for j in xrange(unrollings) : 
      inputs.append([])
      labels.append([])
      for i in xrange(batch_size) :   
        inputs[j].append(raw_data[i + data_index])
        labels[j].append(raw_data[i + data_index + 1])    
      data_index = (data_index + batch_size) % len(raw_data)
  return inputs, labels 

在会话运行中,生成的相同批次将输入到 feed_dict 中,如下面的代码所示。

for step in xrange(num_steps) :
batch_inputs, batch_labels = generate_batches(train_dataset, batch_size, unrollings=5) 
feed_dict = dict()
for i in range(unrollings):
    feed_dict = {train_inputs : batch_inputs,  train_labels : batch_labels}
    _, l, predictions, lr = session.run([optimizer, loss, train_prediction, learning_rate], feed_dict=feed_dict)

训练输入和标签如下:

for _ in range(unrollings) :
 train_data.append(tf.placeholder(shape=[batch_size], dtype=tf.int32))
 train_label.append(tf.placeholder(shape=[batch_size, 1], dtype=tf.float32))
train_inputs = train_data[:unrollings]
train_labels = train_label[:unrollings]

首先,我得到了错误TypeError: unhashable type: 'list'to,我使用tuple(batch_input[i]) 将batch_input 列表转换为元组,这在Python dictionary : TypeError: unhashable type: 'list' 中有清楚的解释。
已解决:然后我收到此错误TypeError: unhashable type: 'numpy.ndarray'
.

【问题讨论】:

  • 你正在尝试使用 ndarray 作为字典的键,它应该是一个字符串
  • 感谢 +1 我更正了代码。

标签: tensorflow


【解决方案1】:

我认为您误解了feed_dict 的工作原理。但首先,python dict 不接受任何不可哈希类的实例作为键。 list 和 numpy.ndarray 都不允许用作 dict 键(即使你用元组包装它)。我发现 list post 解释了 dict 键。

feed_dict 的工作原理

在您的图表中,应该有创建为符号张量的占位符。假设你的原始数据是二维的:(num_samples, num_features),第一维对应样本的大小,第二维对应特征的数量。假设标签是 one-hot 编码的并且总共有 num_classes。

train_data = tf.placeholder(shape=[batch_size, num_features], dtype=tf.float32)
train_labels = tf.placeholder(shape=[batch_size, num_classes], dtype=tf.float32)

然后在您的会话中设置 feed_dict 时,您使用那些符号占位符张量作为键和采样的 batch_data 作为值。

feed_dict = {train_data:batch_inputs, train_labels:batch_labels}

【讨论】:

    猜你喜欢
    • 2017-12-21
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2015-02-07
    • 2021-07-09
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多