如何将列表转换为numpy数组

Anirudh_k07

这是协作的链接https://colab.research.google.com/drive/1wftAvDu_Wu2Y9ahgI1Z1FLciUH5MnSJ9

train_labels = ['GovernmentSchemes','GovernmentSchemes','GovernmentSchemes','GovernmentSchemes','CropInsurance']

training_label_seq = np.array(label_tokenizer.texts_to_sequences(train_labels))

输出即将到来:

[list([3]) list([3]) list([3]) ... list([2]) list([5]) list([1])]

预期产量:

[[3] [3] [3] .. [2] [5]...]
num_epochs = 30
history = model.fit(train_padded, training_label_seq, epochs=num_epochs, validation_data=(validation_padded, validation_label_seq))

错误=> ValueError:无法将NumPy数组转换为张量(不支持的对象类型列表)

Tensorflow战士

我可以使用以下代码重新创建您的问题-

重新创建问题的代码-

import numpy as np
import tensorflow as tf
print(tf.__version__)
from tensorflow.keras.preprocessing.text import Tokenizer

label_tokenizer = Tokenizer()

# Fit on a text 
fit_text = "Tensorflow warriors are awesome people"
label_tokenizer.fit_on_texts(fit_text)

# Training Labels
train_labels = "Tensorflow warriors are great people"
training_label_list = np.array(label_tokenizer.texts_to_sequences(train_labels))

# Print the 
print(training_label_list)
print(type(training_label_list))
print(type(training_label_list[0]))

输出-

2.2.0
[list([9]) list([1]) list([10]) list([5]) list([3]) list([2]) list([11])
 list([7]) list([3]) list([6]) list([]) list([6]) list([4]) list([2])
 list([2]) list([12]) list([3]) list([2]) list([5]) list([]) list([4])
 list([2]) list([1]) list([]) list([4]) list([2]) list([1]) list([])
 list([]) list([2]) list([1]) list([4]) list([9]) list([]) list([8])
 list([1]) list([3]) list([8]) list([7]) list([1])]
<class 'numpy.ndarray'>
<class 'list'>

解决方案-

  1. 替换np.arraynp.hstack可以解决您的问题。model.fit()现在应该可以正常工作了。
  2. 否则,如果您正在寻找问题中的预期输出,training_label_list = label_tokenizer.texts_to_sequences(train_labels)将列出列表。您可以使用np.array([np.array(i) for i in training_label_list])转换为array数组。仅当您的列表列表包含元素数量相同的列表时,此方法才有效。

np.hstack代码-解决方案中第1点的代码。

import numpy as np
import tensorflow as tf
print(tf.__version__)
from tensorflow.keras.preprocessing.text import Tokenizer

label_tokenizer = Tokenizer()

# Fit on a text 
fit_text = "Tensorflow warriors are awesome people"
label_tokenizer.fit_on_texts(fit_text)

# Training Labels
train_labels = "Tensorflow warriors are great people"
training_label_list = np.hstack(label_tokenizer.texts_to_sequences(train_labels))

# Print the 
print(training_label_list)
print(type(training_label_list))
print(type(training_label_list[0]))

输出-

2.2.0
[ 9.  1. 10.  4.  2.  3. 11.  7.  2.  5.  5.  6.  3.  3. 12.  2.  3.  4.
  6.  3.  1.  3.  1.  6.  9.  8.  1.  2.  8.  7.  1.]
<class 'numpy.ndarray'>
<class 'numpy.float64'>

预期的输出有问题-解决方案中第2点的代码。

import numpy as np
import tensorflow as tf
print(tf.__version__)
from tensorflow.keras.preprocessing.text import Tokenizer

label_tokenizer = Tokenizer()

# Fit on a text 
fit_text = "Tensorflow warriors are awesome people"
label_tokenizer.fit_on_texts(fit_text)

# Training Labels
train_labels = "Tensorflow warriors are great people"
training_label_list = label_tokenizer.texts_to_sequences(train_labels)

# Print 
print(training_label_list)
print(type(training_label_list))
print(type(training_label_list[0]))

# To convert elements to array
training_label_list = np.array([np.array(i) for i in training_label_list])

# Print
print(training_label_list)
print(type(training_label_list))
print(type(training_label_list[0]))

输出-

2.2.0
[[9], [1], [10], [4], [2], [3], [11], [7], [2], [5], [], [5], [6], [3], [3], [12], [2], [3], [4], [], [6], [3], [1], [], [], [3], [1], [6], [9], [], [8], [1], [2], [8], [7], [1]]
<class 'list'>
<class 'list'>
[array([9]) array([1]) array([10]) array([4]) array([2]) array([3])
 array([11]) array([7]) array([2]) array([5]) array([], dtype=float64)
 array([5]) array([6]) array([3]) array([3]) array([12]) array([2])
 array([3]) array([4]) array([], dtype=float64) array([6]) array([3])
 array([1]) array([], dtype=float64) array([], dtype=float64) array([3])
 array([1]) array([6]) array([9]) array([], dtype=float64) array([8])
 array([1]) array([2]) array([8]) array([7]) array([1])]
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>

希望这能回答您的问题。学习愉快。


更新2 / 6 / 2020 - Anirudh_k07,根据我们的讨论,我调查了您的程序,model.fit()使用np.hstack标签出现以下错误

ValueError: Data cardinality is ambiguous:
  x sizes: 41063
  y sizes: 41429
Please provide data which shares the same first dimension.

您收到此错误是因为很少有标签具有特殊字符,如-/因此,在执行时np.hstack(label_tokenizer.texts_to_sequences(train_labels),他们正在创建其他行。您可以train_labels使用来打印唯一列表print(set(train_labels))

这是我要说的要点-

# These Labels have special character
train_labels = ['Bio-PesticidesandBio-Fertilizers','Old/SenileOrchardRejuvenation']
training_label_seq = np.hstack(label_tokenizer.texts_to_sequences(train_labels))
print("Two labels are converted to Five :",training_label_seq)

# These Labels are fine
train_labels = ['SoilHealthCard', 'PostHarvestPreservation', 'FertilizerUseandAvailability']
training_label_seq = np.hstack(label_tokenizer.texts_to_sequences(train_labels))
print("Three labels are remain three :",training_label_seq)

输出-

Two labels are converted to Five : [17 18 19 51 52]
Three labels are remain three : [20 36  5]

因此,请进行适当的预处理并消除其中的特殊字符train_labels,然后np.hstack(label_tokenizer.texts_to_sequences(train_labels))在标签上使用model.fit()之后,应该可以正常工作。

希望这能回答您的问题。学习愉快。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将熊猫列表行转换为numpy数组?

如何将轮廓列表转换为 numpy 数组?

如何将元组列表转换为元组的numpy数组?

python:如何将元组列表转换为numpy数组

如何将numpy数组列表转换为单个numpy数组?

如何将numpy数组中的字符串列表转换为numpy数组

如何将具有空数组的numpy数组列表转换为单个数组?

如何将列表列表转换为NumPy数组并获得完整大小?

如何将csv文件中的列表列表转换为numpy数组

如何将元组对列表列表(索引,值)转换为二维 numpy 数组

在Python中,如何将数值数组列表转换为简单的一维numpy数组?

如何将数组列表转换为列表列表?

如何将2d列表转换为2d numpy数组?

如何将列表或numpy数组转换为一维火炬张量?

如何将包含图像数据的一维 python 列表转换为 numpy 数组并显示它

如何将数组的二进制numpy列表转换为图像?

如何将字符串列表转换为数字numpy数组?

如何将基于列表的代码转换为基于numpy数组的代码?

如何将列表的 np 数组转换为 np 数组

如何将嵌套数组列表转换为数组

如何将包含两个 numpy 数组的 python 列表转换为一个 numpy 数组?

如何将列表转换为numpy.void

如何将熊猫系列或索引转换为Numpy数组?

如何将分组的熊猫系列转换为numpy数组

如何将numpy数组转换为libsvm格式

如何将RGB图像转换为numpy数组?

Python - 如何将 for 循环转换为 numpy 数组

如何将numpy数组转换为pandas数据框?

如何将视频转换为numpy数组?