python - 无法将 NumPy 数组转换为张量(不支持的对象类型 int)

标签 python tensorflow keras

我正在做一个肝病分类项目,它是 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).

 

最佳答案

Keras 默认类型是 float,但您的输入类型看起来像 int。请尝试添加

X = X.astype(np.float32)

关于python - 无法将 NumPy 数组转换为张量(不支持的对象类型 int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66029256/

相关文章:

python - 如何从 Python 将 "dot"作为命令运行?

python - 异构特征的featureUnion

tensorflow - 使用分层抽样的 tensorflow 数据集

tensorflow - 将层的输出作为特征向量(KERAS)

python - 了解多类分类的 tf.keras.metrics.Precision 和 Recall

tensorflow - Keras 进度条中的准确度意味着什么?

python - 为什么 isinstance 仅在系列 map 内返回错误值?

python - 为什么不总是将 psyco 用于 Python 代码?

python - 使用 keras 对图像进行 convnet 回归 - 精度不能提高超过 40%

python - 导入错误 : Could not find 'cudart64_100. dll