AttributeError: el objeto ‘str’ no tiene atributo ‘ndim’

Estoy usando Keras para implementar un código de análisis de sentimientos. Tengo mis datos de entrenamiento de la siguiente manera:

  • pos.txt: archivo de texto de todas las revisiones positivas separadas por línea
  • neg.txt: archivo de texto de todas las revisiones negativas separadas por línea

Construyo mi código de manera similar a aquí

La única diferencia es que sus datos se importan desde el conjunto de datos de Keras mientras que los míos son archivos de texto

Este es mi codigo

# CNN for the IMDB problem top_words = 5000 pos_file=open('pos.txt', 'r') neg_file=open('neg.txt', 'r') # Load data from files pos = list(pos_file.readlines()) neg = list(neg_file.readlines()) x = pos + neg total = numpy.array(x) # Generate labels positive_labels = [1 for _ in pos] negative_labels = [0 for _ in neg] y = numpy.concatenate([positive_labels, negative_labels], 0) #Testing pos_test=open('posTest.txt', 'r') posT = list(pos_test.readlines()) print("pos length is",len(posT)) neg_test=open('negTest.txt', 'r') negT = list(neg_test.readlines()) xTest = pos + negT total2 = numpy.array(xTest) # Generate labels positive_labels2 = [1 for _ in posT] negative_labels2 = [0 for _ in negT] yTest = numpy.concatenate([positive_labels2, negative_labels2], 0) #Create model max_words = 1 model = Sequential() model.add(Embedding(top_words, 32, input_length=max_words)) model.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='relu')) model.add(MaxPooling1D(pool_size=1)) model.add(Flatten()) model.add(Dense(250, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) print(model.summary()) #Fit the model model.fit(total, y, validation_data=(xTest, yTest), epochs=2, batch_size=128, verbose=2) # Final evaluation of the model scores = model.evaluate(total2, yTest, verbose=0) print("Accuracy: %.2f%%" % (scores[1]*100)) 

Cuando ejecuto mi código, me sale este error

 File "C:\Users\\Anaconda3\lib\site-packages\keras\engine\training.py", line 70, in  data = [np.expand_dims(x, 1) if x is not None and x.ndim == 1 else x for x in data] AttributeError: 'str' object has no attribute 'ndim' 

Usted está alimentando una lista de cadenas a un modelo que es algo que no espera. Puede usar el módulo keras.preprocessing.text para convertir el texto en una secuencia entera. Más específicamente puedes preparar datos como:

 from keras.preprocessing.text import Tokenizer from keras.preprocessing.sequence import pad_sequences tk = Tokenizer() tk.fit_on_texts(texts) index_list = tk.texts_to_sequences(texts) x_train = pad_sequences(index_list, maxlen=maxlen) 

Ahora x_train (a n_samples * maxlen ndarray de tipo np.int ) es una entrada legítima para el modelo.