Python 当我得到这个时该怎么办;NumPy数组到张量(不支持的对象类型浮点)。”;在这种特殊情况下?
我有些怀疑。我得到了一些分类和数字特征的数据。这里是数据 我正在使用的库包括:Python 当我得到这个时该怎么办;NumPy数组到张量(不支持的对象类型浮点)。”;在这种特殊情况下?,python,tensorflow,keras,deep-learning,neural-network,Python,Tensorflow,Keras,Deep Learning,Neural Network,我有些怀疑。我得到了一些分类和数字特征的数据。这里是数据 我正在使用的库包括: import pandas as pd import numpy as np import tensorflow as tf tf.__version__ 2.3.0 在确定了X数据和y数据(最后一列)之后,我对分类数据进行了编码 from sklearn.compose import ColumnTransformer from sklearn.preprocessing import OneH
import pandas as pd
import numpy as np
import tensorflow as tf
tf.__version__
2.3.0
在确定了X数据和y数据(最后一列)之后,我对分类数据进行了编码
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct= ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [0,1,2])], remainder = 'passthrough')
X = np.array(ct.fit_transform(X))
我之所以使用这种编码类型,是因为第1列和第2列不是数字的(它们定义了“批处理”和“连续”或“亮”和“暗”)操作类型,第0列与特定底物(有机化合物)相关,一些是复杂的(分子量未知),而另一些是简单的(分子量已知)
从编码的结果来看,我得到了:
正如我们看到的,每个类别都有自己的代码,列的数量也增加了。现在我有15个专栏
然后,我继续分割数据
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 = 1)
在X_列和X_测试中,我只对原始数值数据进行了归一化处理
from sklearn.preprocessing import MinMaxScaler
scalar = MinMaxScaler()
X_train[:,11:]=scalar.fit_transform(X_train[:,11:])
X_test[:,11:]=scalar.transform(X_test[:,11:])
最后,我想用输入层、隐藏层和一个输出层构建ANN
ann = tf.keras.models.Sequential()
ann.add(tf.keras.layers.Dense(units=15, activation='relu'))
ann.add(tf.keras.layers.Dense(units=7, activation='relu'))
ann.add(tf.keras.layers.Dense(units=1))
在我定义了ANN的结构之后,我想进行训练
ann.compile(optimizer = 'adam', loss = 'mean_squared_error')
问题来了
ann.fit(X_train, y_train, batch_size = 32, epochs = 100)
这是给我看的:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-47-0ccb0e29ce49> in <module>()
----> 1 ann.fit(X_train, y_train, batch_size = 100, epochs = 728) # propagacion in batchs
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).
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1 ann.fit(X列,y列,批量大小=100,历代=728)#批量宣传
13帧
/中的usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/constant_op.py
转换为张量(值、ctx、数据类型)
96 dtype=dtypes.as\u dtype(dtype).as\u datatype\u enum
97 ctx.确保_已初始化()
--->98返回操作数(值,ctx.device\u名称,数据类型)
99
100
ValueError:无法将NumPy数组转换为张量(不支持的对象类型float)。
那么,我如何解决这个问题呢?您可以通过执行
Numpy
转换来解决问题,如下所示,而fit
方法
ann.fit(np.asarray(X_train,dtype=np.float32), np.asarray(y_train,dtype=np.float32), batch_size = 32, epochs = 100)
或者按照@4.Pi.n在评论中的建议,您可以使用下面的代码将dtype
更改为float32
ann.fit(X_train.astype('float32'), y_train.astype('float32'), batch_size = 32, epochs = 100)
尝试将数组强制转换为
float32
,ann.fit(X_train.astype('float32'),y_train.astype('float32'),batch_size=32,epochs=100)