Python Keras:“;检查目标时出错";
当我试图用密集层构建Keras序列网络来进行多类分类时,我得到了“检查目标时出错”错误,请参见下文。我可以对输出变量使用一个热编码吗?所以我使用这个网络:Python Keras:“;检查目标时出错";,python,keras,Python,Keras,当我试图用密集层构建Keras序列网络来进行多类分类时,我得到了“检查目标时出错”错误,请参见下文。我可以对输出变量使用一个热编码吗?所以我使用这个网络: from keras.models import Sequential from keras.layers import Dense, Dropout from keras.optimizers import RMSprop mean_len = 30 VEC_SIZE = 300 num_categories = 7 def basel
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop
mean_len = 30
VEC_SIZE = 300
num_categories = 7
def baseline_model():
model = Sequential()
model.add(Dense(mean_len, activation='relu',input_shape=(mean_len, VEC_SIZE,)))
model.add(Dropout(0.2))
model.add(Dense(mean_len, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(num_categories, activation='softmax'))
model.summary()
model.compile(loss='categorical_crossentropy',
optimizer=RMSprop(),
metrics=['accuracy'])
return model
培训it:
estimator = KerasClassifier(build_fn=baseline_model,
epochs=200, batch_size=100,
verbose=0, class_weight='balanced')
seed = 7
np.random.seed(seed)
kfold = KFold(n_splits=10, shuffle=True, random_state=seed)
results = cross_val_score(estimator,X_train, Y_train , cv=kfold)
print("Baseline: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))
对于输入向量:
X_train.shape
(6054, 30, 300)
向量是这样的:
X_train[0]
array([[ 0.01066018, 0.02115048, -0.0137242 , ..., -0.04065679,
0.0046372 , -0.01615561],
[-1.01996469, -0.5443387 , 2.59211802, ..., 0.85539412,
-0.34741816, -0.25221351],
[ 0.4434503 , 0.32438764, -0.26006699, ..., 0.27807152,
-0.2352812 , -0.6669544 ],
...,
[ 0.03539507, 0.00473431, 0.03123392, ..., -0.0063079 ,
0.03797895, 0.02079199],
[-0.03658897, 0.02584517, -0.01945854, ..., 0.0241626 ,
-0.03659866, -0.00615268],
[ 0.0182472 , -0.02080663, -0.02958447, ..., -0.04258969,
-0.04952002, 0.01375731]], dtype=float32)
和输出向量:
Y_train.shape
(6054, 7)
Y_train[0]
array([ 0., 0., 0., 0., 1., 0., 0.], dtype=float32)
错误输出:
层(类型)输出形状参数
=================================================================
密集型_23(密集型)(无,30,30)9030
_________________________________________________________________
辍学18(辍学)(无、30、30)0
_________________________________________________________________
密集型_24(密集型)(无、30、30)930
_________________________________________________________________
辍学19(辍学)(无、30、30)0
_________________________________________________________________
密集型_25(密集型)(无、30、7)217
=================================================================
总参数:10177
可培训参数:10177
不可训练参数:0
_________________________________________________________________
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1结果=交叉分值(估计器、X列、Y列、cv=kfold)
2打印(“基线:%.2f%%%(.2f%%”)”%(results.mean()*100,results.std()*100))
...
...
...
D:\usr\anaconda\lib\site packages\keras\engine\training.py输入数据(数据、名称、形状、检查批处理轴、异常前缀)
126'有'+str(len(形状[i]))+
127'维度,但得到了具有形状的数组'+
-->128 str(数组形状))
129对于枚举中的j,(dim,ref_dim)(zip(array.shape,shapes[i]):
130如果不是j且不检查批次轴:
ValueError:检查目标时出错:预期密集_25具有3维,但得到具有形状的数组(5448,7)
有什么问题吗?
在顺序数据的情况下,密集的
是按元素应用的。当您将序列馈送到Dense
时,您将获得序列。您需要应用池化
或展平
,以便将数据从顺序数据转换为向量。如何在MNIST数据集上训练一个简单的深度神经网络?它也是顺序的,并且这种配置是有效的。请您举出一个“共享”或“扁平化”的例子,谢谢!它之所以有效,是因为图像被压缩/展平为向量。Dense
在顺序数据的情况下,是按元素应用的。当您将序列馈送到Dense
时,您将获得序列。您需要应用池化
或展平
,以便将数据从顺序数据转换为向量。如何在MNIST数据集上训练一个简单的深度神经网络?它也是顺序的,并且这种配置是有效的。请您举出一个“共享”或“扁平化”的例子,谢谢!这是因为图像被压缩/展平为向量。
Layer (type) Output Shape Param #
=================================================================
dense_23 (Dense) (None, 30, 30) 9030
_________________________________________________________________
dropout_18 (Dropout) (None, 30, 30) 0
_________________________________________________________________
dense_24 (Dense) (None, 30, 30) 930
_________________________________________________________________
dropout_19 (Dropout) (None, 30, 30) 0
_________________________________________________________________
dense_25 (Dense) (None, 30, 7) 217
=================================================================
Total params: 10,177
Trainable params: 10,177
Non-trainable params: 0
_________________________________________________________________
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-160-6a936b699825> in <module>()
----> 1 results = cross_val_score(estimator,X_train, Y_train , cv=kfold)
2 print("Baseline: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))
...
...
...
D:\usr\anaconda\lib\site-packages\keras\engine\training.py in _standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
126 ' to have ' + str(len(shapes[i])) +
127 ' dimensions, but got array with shape ' +
--> 128 str(array.shape))
129 for j, (dim, ref_dim) in enumerate(zip(array.shape, shapes[i])):
130 if not j and not check_batch_axis:
ValueError: Error when checking target: expected dense_25 to have 3 dimensions, but got array with shape (5448, 7)