【问题标题】:Failed to convert a NumPy array to a Tensor (Unsupported object type int)无法将 NumPy 数组转换为张量(不支持的对象类型 int)
【发布时间】:2021-02-03 14:12:55
【问题描述】:

我正在做一个对肝病进行分类的项目,它是 csv 类型的数据集。我在拟合模型时遇到错误,请关注以下代码。 导入所有需要的库和子库,

import tensorflow as tf
import keras.backend as K
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import Adam
from keras.callbacks import EarlyStopping
from keras.utils import to_categorical
import keras
import numpy as np
from keras.layers import BatchNormalization
from keras.layers import Dropout
from keras import regularizers
import pandas as pd
import sklearn
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
import matplotlib
from matplotlib import pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format='retina'

定义数据集

df = pd.read_csv('data.csv')

数据定义为 X 和 y 进行分割,

X = df.iloc[:,0:10]
y = df.iloc[:,-1]

使用 sklearn 拆分数据集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state = 0)

定义一个“浅层”逻辑回归模型

model = Sequential()
model.add(Dense(13,input_shape=(30,), activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.001), metrics = ['accuracy'])

这是产生错误的代码:

#------>Pass several parameters to 'EarlyStopping' function and assign it to 'earlystopper'

earlystopper = EarlyStopping(monitor='val_loss', min_delta=0, patience=15, verbose=1, mode='auto')


#------>Fit model over 2000 iterations with 'earlystopper' callback, and assign it to history

history = model.fit(X_train, y_train, epochs = 100, validation_split = 0.15, verbose = 0, 
                    callbacks = [earlystopper])

错误是:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-16-f569e3a80b7d> in <module>
      5 # Fit model over 2000 iterations with 'earlystopper' callback, and assign it to history
      6 
----> 7 history = model.fit(X_train, y_train, epochs = 100, validation_split = 0.15, verbose = 0, 
      8                     callbacks = [earlystopper])
      9 

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py in _method_wrapper(self, *args, **kwargs)
     64   def _method_wrapper(self, *args, **kwargs):
     65     if not self._in_multi_worker_mode():  # pylint: disable=protected-access
---> 66       return method(self, *args, **kwargs)
     67 
     68     # Running inside `run_distribute_coordinator` already.

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)
    793       # `Tensor` and `NumPy` input.
    794       (x, y, sample_weight), validation_data = (
--> 795           data_adapter.train_validation_split((x, y, sample_weight),
    796                                               validation_split=validation_split,
    797                                               shuffle=False))

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/data_adapter.py in train_validation_split(arrays, validation_split, shuffle)
   1335     return array_ops.gather_v2(t, indices)
   1336 
-> 1337   train_arrays = nest.map_structure(
   1338       functools.partial(_split, indices=train_indices), arrays)
   1339   val_arrays = nest.map_structure(

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/util/nest.py in map_structure(func, *structure, **kwargs)
    615 
    616   return pack_sequence_as(
--> 617       structure[0], [func(*x) for x in entries],
    618       expand_composites=expand_composites)
    619 

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/util/nest.py in <listcomp>(.0)
    615 
    616   return pack_sequence_as(
--> 617       structure[0], [func(*x) for x in entries],
    618       expand_composites=expand_composites)
    619 

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/data_adapter.py in _split(t, indices)
   1332     if t is None:
   1333       return t
-> 1334     t = ops.convert_to_tensor_v2(t)
   1335     return array_ops.gather_v2(t, indices)
   1336 

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/framework/ops.py in convert_to_tensor_v2(value, dtype, dtype_hint, name)
   1276     ValueError: If the `value` is a tensor not of given `dtype` in graph mode.
   1277   """
-> 1278   return convert_to_tensor(
   1279       value=value,
   1280       dtype=dtype,

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/framework/ops.py in convert_to_tensor(value, dtype, name, as_ref, preferred_dtype, dtype_hint, ctx, accepted_result_types)
   1339 
   1340     if ret is None:
-> 1341       ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
   1342 
   1343     if ret is NotImplemented:

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/framework/constant_op.py in _constant_tensor_conversion_function(v, dtype, name, as_ref)
    319                                          as_ref=False):
    320   _ = as_ref
--> 321   return constant(v, dtype=dtype, name=name)
    322 
    323 

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/framework/constant_op.py in constant(value, dtype, shape, name)
    259     ValueError: if called on a symbolic tensor.
    260   """
--> 261   return _constant_impl(value, dtype, shape, name, verify_shape=False,
    262                         allow_broadcast=True)
    263 

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/framework/constant_op.py in _constant_impl(value, dtype, shape, name, verify_shape, allow_broadcast)
    268   ctx = context.context()
    269   if ctx.executing_eagerly():
--> 270     t = convert_to_eager_tensor(value, ctx, dtype)
    271     if shape is None:
    272       return t

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/framework/constant_op.py in convert_to_eager_tensor(value, ctx, dtype)
     94       dtype = dtypes.as_dtype(dtype).as_datatype_enum
     95   ctx.ensure_initialized()
---> 96   return ops.EagerTensor(value, ctx.device_name, dtype)
     97 
     98 

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

 

【问题讨论】:

  • 也许X的类型是int?如果是这样,请尝试使用 X = X.astype(np.float32)
  • @ZhongboChen 是的,好的。感谢您分享宝贵的知识。
  • 你的问题解决了吗?
  • 不,没解决。????
  • 遇到了什么问题?请更新问题

标签: python tensorflow keras


【解决方案1】:

Keras 默认类型是浮点数,但您的输入类型似乎是 int。请尝试添加

X = X.astype(np.float32)

【讨论】:

    猜你喜欢
    • 2020-09-09
    • 1970-01-01
    • 2020-07-05
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2021-04-25
    • 2022-01-10
    相关资源
    最近更新 更多