python Keras型号的Logit和标签必须具有相同的形状

s8vozzvw  于 2022-12-28  发布在  Python
关注(0)|答案(2)|浏览(175)

我是Keras的新手,一直在使用网络上的资源进行练习。不幸的是,我无法在不抛出以下错误的情况下构建模型:
值错误:收到的logitslabels必须具有相同的形状((无,10)vs(无,1))。
我尝试了以下几点:

DF = pd.read_csv("https://raw.githubusercontent.com/EpistasisLab/tpot/master/tutorials/MAGIC%20Gamma%20Telescope/MAGIC%20Gamma%20Telescope%20Data.csv")

X = DF.iloc[:,0:-1]
y = DF.iloc[:,-1]
yBin = np.array([1 if x == 'g' else 0 for x in y ])
scaler = StandardScaler()
X1 = scaler.fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(X1, yBin, test_size=0.25, random_state=2018) 

print(X_train.__class__,X_test.__class__,y_train.__class__,y_test.__class__ )

model=Sequential()
model.add(Dense(6,activation="relu", input_shape=(10,)))
model.add(Dense(10,activation="softmax"))
model.build(input_shape=(None,1))
model.summary()
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
model.fit(x=X_train,
          y=y_train,
          epochs=600,
          validation_data=(X_test, y_test), verbose=1
          )

我看过我的模型很可能在输入参数方面是错误的,正确的方法是什么?

jgwigjjp

jgwigjjp1#

当我看到数据的形状时

print(X_train.shape,X_test.shape,y_train.shape,y_test.shape)

我明白了,X是10维的而y是1维的
因此,您需要10维输入

model.build(input_shape=(None,10))

最后一个致密层中的一维输出

model.add(Dense(1,activation="softmax"))
brtdzjyr

brtdzjyr2#

目标变量yBin/y_train/y_test是1D数组(给定批次的形状为(无,1))。
你的logit来自Dense层,最后一个Dense层有10个激活softmax的神经元,所以它会为每个输入给予10个输出,或者为每个批次提供(batch_size,10),正式表示为(None,10)。
为了解决特定的形状不匹配问题,将致密层的神经元计数更改为1,并将激活函数设置为“S形”。

model.add(Dense(1,activation="sigmoid"))

相关问题