Ошибка при передаче обучающего значения: не удалось преобразовать массив NumPy в тензор

#python #numpy #tensorflow #deep-learning #transfer-learning

#python #numpy #тензорный поток #глубокое обучение #передача-обучение

Вопрос:

Я практикуюсь в обучении передаче с помощью набора данных Iris.

Для следующего кода я получаю следующее сообщение об ошибке:

Не удалось преобразовать массив NumPy в тензор (неподдерживаемый тип объекта с плавающей точкой)

Мне нужна помощь в решении этой ошибки.

Ниже импортированные библиотеки

 import pandas as pd
import io
import requests
import numpy as np
from sklearn import metrics
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation
from tensorflow.keras.callbacks import EarlyStopping
  

прочитайте файл csv с помощью pandas

 df = pd.read_csv("Iris.csv", na_values=['NA', '?'])
df.columns
#output of df.colums
Index(['Id', 'SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm',
       'Species'],
      dtype='object')
  

преобразовать в массив numpy для классификации

 x = df[['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'Species']].values
dummies  = pd.get_dummies(df['Species'])   #classification
species = dummies.columns
y = dummies.values
  

Создайте нейронную сеть,

 model = Sequential()
model.add(Dense(50, input_dim = x.shape[1], activation= 'relu'))   #Hidden Layer-->1
model.add(Dense(25, activation= 'relu'))     #Hidden Layer-->2
model.add(Dense(y.shape[1], activation= 'softmax'))     #Output
  

Скомпилируйте модель NN

 model.compile(loss ='categorical_crossentropy', optimizer ='adam')
  

Установите модель и, пожалуйста, обратите внимание на эту часть

 model_fit=model.fit(x,y, verbose=2, epochs=10, steps_per_epoch=3)
  

Ошибка приведена ниже,

 ValueError                                Traceback (most recent call last)
<ipython-input-48-0ff464178023> in <module>()
----> 1 model_fit=model.fit(x,verbose=2, epochs=10, steps_per_epoch=3)

13 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/constant_op.py in convert_to_eager_tensor(value, ctx, dtype)
     96       dtype = dtypes.as_dtype(dtype).as_datatype_enum
     97   ctx.ensure_initialized()
---> 98   return ops.EagerTensor(value, ctx.device_name, dtype)
     99 
    100 

ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type float).
  

Ответ №1:

Вы можете попробовать следующее:

 X = np.asarray(x).astype(np.float32)

model_fit=model.fit(X,y, verbose=2, epochs=10, steps_per_epoch=3)
  

Похоже, что один из столбцов не поддерживается. Поэтому просто преобразуйте его в массив numpy с типом данных float .

Обратите внимание, что вы x неправильно определяете, которые содержат класс. Это должно быть:

 x = df[['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']].values
  

Комментарии:

1. @ImdadulHaque вы тоже заметили заметку? что касается построения x