【发布时间】: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