我正在学习keras,这是我第一次在玩具示例中使用它,所以我尝试了以下线性回归,但是我得到了ValueError: setting an array element with a sequence.
:
在:
import pandas as pd
import keras
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense, Activation
dims = X.shape[1]
print(dims, 'dims')
print("Building model...")
nb_classes = y.shape[0]
print(nb_classes, 'classes')
model = Sequential()
model.add(Dense(1, input_dim=dims))
model.compile(optimizer='sgd', loss='mean_squared_error')
print(X.shape)
print(y.shape)
model.fit(X, y)
输出:
68 dims
Building model...
1000 classes
(1000, 68)
(1000,)
Epoch 1/10
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-10-7a58187d7756> in <module>()
19 print(X.shape)
20 print(y.shape)
---> 21 model.fit(X, y)
/usr/local/lib/python3.5/site-packages/keras/models.py in fit(self, x, y, batch_size, nb_epoch, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, **kwargs)
662 shuffle=shuffle,
663 class_weight=class_weight,
--> 664 sample_weight=sample_weight)
665
666 def evaluate(self, x, y, batch_size=32, verbose=1,
/usr/local/lib/python3.5/site-packages/keras/engine/training.py in fit(self, x, y, batch_size, nb_epoch, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch)
1141 val_f=val_f, val_ins=val_ins, shuffle=shuffle,
1142 callback_metrics=callback_metrics,
-> 1143 initial_epoch=initial_epoch)
1144
1145 def evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None):
/usr/local/lib/python3.5/site-packages/keras/engine/training.py in _fit_loop(self, f, ins, out_labels, batch_size, nb_epoch, verbose, callbacks, val_f, val_ins, shuffle, callback_metrics, initial_epoch)
841 batch_logs['size'] = len(batch_ids)
842 callbacks.on_batch_begin(batch_index, batch_logs)
--> 843 outs = f(ins_batch)
844 if not isinstance(outs, list):
845 outs = [outs]
/usr/local/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py in __call__(self, inputs)
1601 session = get_session()
1602 updated = session.run(self.outputs + [self.updates_op],
-> 1603 feed_dict=feed_dict)
1604 return updated[:len(self.outputs)]
1605
/usr/local/lib/python3.5/site-packages/tensorflow/python/client/session.py in run(self, fetches, feed_dict, options, run_metadata)
764 try:
765 result = self._run(None, fetches, feed_dict, options_ptr,
--> 766 run_metadata_ptr)
767 if run_metadata:
768 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)
/usr/local/lib/python3.5/site-packages/tensorflow/python/client/session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)
935 ' to a larger type (e.g. int64).')
936
--> 937 np_val = np.asarray(subfeed_val, dtype=subfeed_dtype)
938
939 if not subfeed_t.get_shape().is_compatible_with(np_val.shape):
/usr/local/lib/python3.5/site-packages/numpy/core/numeric.py in asarray(a, dtype, order)
529
530 """
--> 531 return array(a, dtype, copy=False, order=order)
532
533
ValueError: setting an array element with a sequence.
数据:
X.shape
(1000, 20)
标签:
y.shape
(1000,)
答案 0 :(得分:2)
input_shape
的{{1}}参数应为整数。所以,请尝试以下方法:
Dense()
<强> keras.layers.core.Dense 强>(output_dim,初始化= 'glorot_uniform',激活=无,权重=无,W_regularizer =无,b_regularizer =无,activity_regularizer =无,W_constraint =无, b_constraint = None,bias = True,input_dim = None)
,其中
input_dim :输入的维数(整数)。将此图层用作模型中的第一个图层时,此参数(或者关键字参数input_shape)是必需的。
答案 1 :(得分:2)
Dense图层的第一个参数是该图层的输出数。因此,在您的情况下,您有一个带有形状(1000,20)的输入和带有形状(1000,)的标签。这意味着你有1000个训练样本,有20个特征,每个标签是一维的(你有1000个)。然后,您需要修改模型以获得单个输出:
model = Sequential()
model.add(Dense(1, input_dim=dims))
model.compile(optimizer='sgd', loss='mean_squared_error')
在这里,我使用了一个事实,你想要实现线性回归去除softmax(用于分类),并使用均方误差损失而不是交叉熵。