我正在尝试构建一个keras模型,我有576个样本,4个输入变量和1个目标变量,它们是1或0.我相信我的目标维度/格式有问题,或我模型的最后一层的尺寸。我撞墙了,可以帮助你。
我尝试的第一件事是将目标变量转换为二进制numpy数组,但是当我输入以下代码时:
import pandas as pd
from keras.layers import Dense
import numpy as np
from keras.models import Sequential
from keras.utils.np_utils import to_categorical
n_cols = predictors.shape[1]
target_b = to_categorical(target)
model = Sequential()
model.add(Dense(6, activation='relu',input_shape=(n_cols,) ))
model.add(Dense(1))
model.compile(optimizer = 'adam', loss ='categorical_crossentropy',metrics= ['accuracy'] )
model.fit(predictors, target_b, validation_split=.3)
我收到以下错误:
ValueError: Error when checking target: expected dense_24 to have shape (None, 1) but got array with shape (576, 2)
当我试图将目标变量保持为整数numpy ndarray时,我使用了sparse_categorical_crossentropy,但收到了此错误:
InvalidArgumentError (see above for traceback): Received a label value of 1 which is outside the valid range of [0, 1). Label values: 0 0 0 1 0 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 0 1 1 0 0 1 0 1
[[Node: SparseSoftmaxCrossEntropyWithLogits_6/SparseSoftmaxCrossEntropyWithLogits = SparseSoftmaxCrossEntropyWithLogits[T=DT_FLOAT, Tlabels=DT_INT64, _device="/job:localhost/replica:0/task:0/cpu:0"](Reshape_13, Cast_30)]
我认为我需要做的就是改变目标变量或模型尺寸,但是我不确定要改变哪一个,我不知道如何改变。我非常感谢你的指导。谢谢!
答案 0 :(得分:2)
有几种方法:
Dense(2, activation='softmax')
to_categorical
行,并使用Dense(2, activation='softmax')
和loss='sparse_categorical_crossentropy'
to_categorical
行,并使用Dense(1, activation='sigmoid')
和loss='binary_crossentropy'
答案 1 :(得分:0)
您在Dense图层中的输入形状需要1D输入,但看起来您想要输入的数据是2D。您可以将输入值调整为input_shape=(576, 2)
。
答案 2 :(得分:0)
您的上一层应为Dense(2)
。这是因为你的target_b矩阵必须是形状(576,2)。