【问题标题】:Tensorflow, ValueError: setting an array element with a sequenceTensorflow,ValueError:使用序列设置数组元素
【发布时间】:2018-11-11 11:45:26
【问题描述】:

在尝试训练我的张量流图时,我收到错误消息:

ValueError: 使用序列设置数组元素

发生在这行代码中,在 feed_dict 函数中:

# run the session and train the model
        _, c = sess.run([optimizer, cost], feed_dict = {input_x: x_train_v, output_y: y_train})

我的输出变量 (y_train) 似乎有问题。它是 pandas 数据框中的大小(25)列表。 已经用

检查了每个列表是否具有相同的长度
print(y_train.shape) #(23904,)
print(y_train.apply(type)[0]) #<class 'list'>

n = len(y_train[0])
if all(len(x) == n for x in y_train):
    print("true")  #true  

使用以下代码创建变量:

dataframe['category_number'] = ""
for _ in range(len(dataframe)):
    string = dataframe.at[_, 'Product Categorization Tier 1'].strip()
    number = category_list.index(string)   
    # saving as category vector
    vector = [0] * 25 
    vector[number] = 1
    dataframe.at[_,'category_number'] = vector

y_train = train_df["category_number"]

编辑: 成本函数和优化器

prediction = neural_network_model(input_x )
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=output_y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

完整的错误信息:

【问题讨论】:

  • print(y_train.apply(type)[0]) #&lt;class 'list'&gt;我想你在这里期待int?
  • 我希望它是一个列表,因为它是输出标签的向量,我的 NN 在输出层应该有 25 个神经元,就像列表的长度一样
  • 所以它是一个用于分类的单热向量。你的损失期望一个标量吗? E:你能打印整个stracktrace吗?
  • 是的没错,它是一个单热向量。我添加了我的成本函数和完整的错误消息
  • 如果是单热向量,print(y_train.shape) 不应该返回 (23904,25) 吗?

标签: python pandas tensorflow


【解决方案1】:

试试类似的东西

y_train = []
for _ in range(len(dataframe)):
    string = dataframe.at[_, 'Product Categorization Tier 1'].strip()
    number = category_list.index(string)   
    # saving as category vector
    vector = [0] * 25 
    vector[number] = 1
    y_train.append(vector)

并确保您获得的是 2d-int 数组而不是对象数组

【讨论】:

  • 好的,我会试试的。我将它作为 Dataframe 行返回的原因是因为我实际上是在之后将数据拆分为训练集和测试集。认为我必须找到另一种方法来做到这一点
  • 似乎有效,现在无法判断,因为训练时期似乎需要几个小时