我正在尝试构建一个简单的测试,只是为了了解如何训练每个特征都是多维的数据。
我试图构建一个包含6个特征的数据集。每个特征的形状都是多维的
简单代码:
import random import numpy as np import pandas as pd from keras.models import Sequential from keras.layers import Dense, Dropout from sklearn.model_selection import train_test_split from keras.utils import to_categorical from sklearn.preprocessing import LabelEncoder # # 步骤1 - 构建随机多维特征(每个特征都是具有随机值的多维) # df = pd.DataFrame(columns=['m', 'c', 'mm', 'cc', 't', 'target']) input_list = [] for i in range (800): m = np.random.rand(10,20, 5, 5) c = np.random.rand(10, 3) mm = np.random.rand(10) cc = np.random.rand(20, 5, 6, 2) t = np.random.rand(10, 3) dict = {'m': mfccs, 'c': chroma, 'mm': mel, 'cc': contrast, 't': tonnetz, 'target': random.randint(1, 3)} input_list.append(dict) df = df.append(input_list, ignore_index=True) df = df.reset_index() # # 步骤2 - 分割为训练和测试集 # train, test = train_test_split(df, test_size=0.2) x_train = train.to_numpy()[:,0:6] y_train = train.to_numpy()[:,6] x_test = test.to_numpy()[:, 0:6] y_test = test.to_numpy()[:, 6] lb = LabelEncoder() y_train_hot = to_categorical(lb.fit_transform(y_train)) y_test_hot = to_categorical(lb.fit_transform(y_test)) # # 步骤3 - 构建简单模型 # model = Sequential() model.add(Dense(50, input_shape=(6,), activation='relu')) model.add(Dropout(0.1)) model.add(Dense(128, activation='relu')) model.add(Dropout(0.25)) model.add(Dense(128, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(3, activation='softmax')) model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam') # # 步骤4 - 尝试拟合模型 # model.fit(x_train, y_train_hot, batch_size=20, epochs=20, verbose=1, validation_data=(x_test, y_test_hot))
我遇到了以下错误:
ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type int).
完整的错误追踪:
Traceback (most recent call last): File "/home/ubadmin/PycharmProjects/VR/models/tests/multi_dim_test.py", line 74, in <module> main() File "/home/ubadmin/PycharmProjects/VR/models/tests/multi_dim_test.py", line 62, in main model.fit(x_train, y_train_hot, batch_size=20, epochs=20, verbose=1, validation_data=(x_test, y_test_hot)) File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 108, in _method_wrapper return method(self, *args, **kwargs) File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 1063, in fit steps_per_execution=self._steps_per_execution) File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 1117, in __init__ model=model) File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 265, in __init__ x, y, sample_weights = _process_tensorlike((x, y, sample_weights)) File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 1021, in _process_tensorlike inputs = nest.map_structure(_convert_numpy_and_scipy, inputs) File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/util/nest.py", line 635, in map_structure structure[0], [func(*x) for x in entries], File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/util/nest.py", line 635, in <listcomp> structure[0], [func(*x) for x in entries], File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 1016, in _convert_numpy_and_scipy return ops.convert_to_tensor(x, dtype=dtype) File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1499, in convert_to_tensor ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref) File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/framework/tensor_conversion_registry.py", line 52, in _default_conversion_function return constant_op.constant(value, dtype, name=name) File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py", line 264, in constant allow_broadcast=True) File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py", line 275, in _constant_impl return _constant_eager_impl(ctx, value, dtype, shape, verify_shape) File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py", line 300, in _constant_eager_impl t = convert_to_eager_tensor(value, ctx, dtype) File "/home/ubadmin/VR/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py", line 98, in convert_to_eager_tensor return ops.EagerTensor(value, ctx.device_name, dtype)ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type int).
-
我遗漏了什么?(如何修复代码?)
-
如何训练每个特征包含多维数据的模型?
回答: