これがcollabへのリンクです 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配列をTensorに変換できませんでした(サポートされていないオブジェクトタイプリスト)
以下のコードを使用して問題を再現できました-
問題を再現するためのコード-
_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'>
_
ソリューション-
np.array
_を_np.hstack
_に置き換えると問題が解決します。これでmodel.fit()
は問題なく動作するはずです。training_label_list = label_tokenizer.texts_to_sequences(train_labels)
はリストのリストを提供します。 np.array([np.array(i) for i in training_label_list])
を使用して、配列の配列に変換できます。これは、リストのリストに同じ数の要素を持つリストが含まれている場合にのみ機能します。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 、私たちの議論に従って、私はあなたのプログラムを調べました、そしてあなたは得ていますラベルに_np.hstack
_を使用した後のmodel.fit()
の以下のエラー.
_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)
を実行すると、追加の行が作成されます。 print(set(train_labels))
を使用すると、一意の_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()
は正常に動作します。
これがあなたの質問に答えることを願っています。ハッピーラーニング。