我是Keras的新手,一直在使用网络上的资源进行练习。不幸的是,我无法在不抛出以下错误的情况下构建模型:
值错误:收到的logits
和labels
必须具有相同的形状((无,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
)
我看过我的模型很可能在输入参数方面是错误的,正确的方法是什么?
2条答案
按热度按时间jgwigjjp1#
当我看到数据的形状时
我明白了,
X
是10维的而y
是1维的因此,您需要10维输入
最后一个致密层中的一维输出
brtdzjyr2#
目标变量
yBin/y_train/y_test
是1D数组(给定批次的形状为(无,1))。你的logit来自Dense层,最后一个Dense层有10个激活softmax的神经元,所以它会为每个输入给予10个输出,或者为每个批次提供(batch_size,10),正式表示为(None,10)。
为了解决特定的形状不匹配问题,将致密层的神经元计数更改为1,并将激活函数设置为“S形”。