我使用了两个(1, 5)
形状的数组,所以我使用了layers.Input(shape=(5,)),
,但在输出中我得到了这个错误:
节点:'稀疏_类别_交叉熵/SparseSoftmaxCrossEntropyWithLogits/SparseSoftwaremaxCrossEntrCopyWithLogits'logits和标签必须具有相同的第一维度,得到logits形状[1,5]和标签形状[5][{{节点稀疏_类别_交叉熵/SparseSoftmaxCrossEntropyWithLogits/SparseSoftwaremaxCrossEntrCopyWithLogits}]][Op:__推理_训练_功能_31405]
在我的代码中,我不知道标签和logits是什么,所以我无法解决这个错误。
为什么会出现此错误?
代码:
x=[[1,2,3,4,5]]
y=[[3,2,3,6,5]]
x=numpy.array(x)
y=numpy.array(y)
model = keras.Sequential(
[
layers.Input(shape=(5,)),
layers.Dense(3, activation="relu", name="layer1"),
layers.Dense(3, activation="relu", name="layer2"),
layers.Dense(3, name="layer3"),
]
)
model.compile(optimizer=keras.optimizers.Adam(learning_rate=.0001),loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(x,y,batch_size=10,epochs=11,verbose=2)
logits-shape是输出形状,它是最后一层(1,n_classes)的形状。
因此:
x应该像(n_samples,n_features)
y应该像(n_samples,1)
在您的情况下,
我假设这里n_features=5,n_samples=4,n_classes=7,所以我在这里添加了一些例子。
x=[
[1,2,3,4,5],
[1,2,3,9,5],
[1,2,7,4,5],
[1,1,3,4,5],
]
y=[[3],[2],[3],[6]]
x=numpy.array(x)
y=numpy.array(y)
model = keras.Sequential(
[
layers.Input(shape=(5,)),
layers.Dense(3, activation="relu", name="layer1"),
layers.Dense(3, activation="relu", name="layer2"),
layers.Dense(7, activation='softmax')
]
)
model.compile(optimizer=keras.optimizers.Adam(learning_rate=.1),loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(x,y,batch_size=10,epochs=101,verbose=2)