繁体   English   中英

Keras 顺序 - ValueError:尺寸必须相等

[英]Keras Sequential - ValueError: Dimensions must be equal

我使用具有以下形状的 X 和 y 数据(它们都是 np 数组):

print(X.shape)
print(y.shape)
(1075, 5, 50)
(1075, 5)

该模型:

# define the keras model
model = Sequential()
model.add(Dense(512, input_shape=(5, 50), activation='relu'))
model.add(Dense(64, activation='relu'))

model.compile(loss='categorical_crossentropy', optimizer="Adam", metrics=['accuracy'])

history = model.fit(X, y, epochs=100, batch_size=10, validation_split=0.2)

我收到以下错误:

ValueError                                
Traceback (most recent call last)
Cell In[79], line 1
----> 1 history = model.fit(X, y, epochs=100, batch_size=10, validation_split=0.2, callbacks=[callback])

ValueError: Shapes (10, 5) and (10, 5, 64) are incompatible

如果我将最后一层密度从 64 更改为 10,则错误输出会发生变化:

model.add(Dense(10, activation='relu'))
ValueError: Shapes (10, 5) and (10, 5, 10) are incompatibl

我必须将最后一层改变到什么维度,以便它适合我的 y 数据的形状?

您的代码中有两个问题。 首先你的模型的输出形状与你的'y'不匹配所以你的最后一层是这样的(我添加了softmax因为我猜你正在做多类分类)

model.add(tf.keras.layers.Dense(5, activation='softmax'))

但是对于最后一层,你仍然有一个 2D 形状到 1D 形状,所以你需要在传递到最后一层之前将它展平

完整的工作示例是

X = tf.ones((1075, 5, 50))
y = tf.ones((1075, 5))
print(X.shape)
print(y.shape)
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(512, input_shape=(5, 50), activation='relu'))
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Flatten(input_shape=(5,5)))
model.add(tf.keras.layers.Dense(5, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer="Adam", metrics=['accuracy'])
print(model.summary())
history = model.fit(X, y, epochs=100, batch_size=10, validation_split=0.2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM