Numpy Массив tensorflow.keras.preprocessing.text.Tokenizer.texts_to_sequences
дает странный вывод для учебных ярлыков, как показано ниже:
(training_label_list[0:10]) = [list([1]) list([1]) list([1]) list([1]) list([1]) list([1]) list([1]) list([1]) list([1]) list([1])]
, но печатает обычный массив для проверочных ярлыков,
(validation_label_list[0:10]) = [[16]
[16]
[16]
[16]
[16]
[16]
[16]
[16]
[16]
[16]]
Другими словами, type(training_label_list[0]) = <class 'list'>
, но
type(validation_label_list[0]) = <class 'numpy.ndarray'>
Следовательно, при обучении модели с использованием Keras Model.fit
это приводит к следующей ошибке,
ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type list).
Это ссылка Google Colab , чтобы легко воспроизвести ошибку.
Полный код для воспроизведения ошибки приведен ниже:
!pip install tensorflow==2.1
# For Preprocessing the Text => To Tokenize the Text
from tensorflow.keras.preprocessing.text import Tokenizer
# If the Two Articles are of different length, pad_sequences will make the length equal
from tensorflow.keras.preprocessing.sequence import pad_sequences
# Package for performing Numerical Operations
import numpy as np
Unique_Labels_List = ['India', 'USA', 'Australia', 'Germany', 'Bhutan', 'Nepal', 'New Zealand', 'Israel', 'Canada', 'France', 'Ireland', 'Poland', 'Egypt', 'Greece', 'China', 'Spain', 'Mexico']
Train_Labels = Unique_Labels_List[0:14]
#print('Train Labels = {}'.format(Train_Labels))
Val_Labels = Unique_Labels_List[14:]
#print('Val_Labels = {}'.format(Val_Labels))
No_Of_Train_Items = [248, 200, 200, 218, 248, 248, 249, 247, 220, 200, 200, 211, 224, 209]
No_Val_Items = [212, 200, 219]
T_L = []
for Each_Label, Item in zip(Train_Labels, No_Of_Train_Items):
T_L.append([Each_Label] * Item)
T_L = [item for sublist in T_L for item in sublist]
V_L = []
for Each_Label, Item in zip(Val_Labels, No_Val_Items):
V_L.append([Each_Label] * Item)
V_L = [item for sublist in V_L for item in sublist]
len(T_L)
len(V_L)
label_tokenizer = Tokenizer()
label_tokenizer.fit_on_texts(Unique_Labels_List)
# Since it should be a Numpy Array, we should Convert the Sequences to Numpy Array, for both Training and
# Test Labels
training_label_list = np.array(label_tokenizer.texts_to_sequences(T_L))
validation_label_list = np.array(label_tokenizer.texts_to_sequences(V_L))
print('(training_label_list[0:10]) = {}'.format((training_label_list[0:10])))
print('(validation_label_list[0:10]) = {}'.format((validation_label_list[0:10])))
print('type(training_label_list[0]) = ', type(training_label_seq[0]))
print('type(validation_label_seq[0]) = ', type(validation_label_seq[0]))
Я буду благодарен, если кто-нибудь подскажет мне, как я могу получить и Учебные ярлыки, и Валидационные ярлыки в одном формате, так как я потратил на это так много времени.