keras中的输入形状(该损失预计目标与输出形状相同)
这是我第一次使用keras,我正试图遵循我在网上找到的教程,并将我自己的数据与之匹配。我有一个矩阵和二进制标签keras中的输入形状(该损失预计目标与输出形状相同),r,tensorflow,keras,neural-network,R,Tensorflow,Keras,Neural Network,这是我第一次使用keras,我正试图遵循我在网上找到的教程,并将我自己的数据与之匹配。我有一个矩阵和二进制标签 > str(d_train) num [1:1062, 1:180] -0.04748 0.04607 -0.05429 -0.0126 -0.00219 ... > str(trainlabels) num [1:1062, 1:2] 0 0 0 0 0 0 1 0 0 0 ... 我的代码: model = keras_model_sequential() mod
> str(d_train)
num [1:1062, 1:180] -0.04748 0.04607 -0.05429 -0.0126 -0.00219 ...
> str(trainlabels)
num [1:1062, 1:2] 0 0 0 0 0 0 1 0 0 0 ...
我的代码:
model = keras_model_sequential()
model %>%
layer_dense(units = 8, activation = 'relu', input_shape = c(180)) %>%
layer_dense(units = 3, activation = "softmax")
summary(model)
## Compile
model %>%
compile(loss = "binary_crossentropy",
optimizer = "adam",
metrics = "accuracy")
## Fit model
history = model %>%
fit(d_train,
trainlabels,
epoch=200,
batch_size=32,
validation_split=0.2)
我似乎无法适应模型,我收到以下错误消息:
Error in py_call_impl(callable, dots$args, dots$keywords) :
ValueError: A target array with shape (1062, 2) was passed for an output of shape (None, 3) while using as loss `binary_crossentropy`. This loss expects targets to have the same shape as the output.
根据错误消息,要求输入数组的不同形状,我尝试更改周围的尺寸,但没有成功。我不是R专家,但在这里:
layer_dense(units = 3, activation = "softmax")
您告诉Keras您的网络的输出有三个类。您的标签有shape(1062,2)
,这表明它有两个类,因此存在不一致性
你可以在上一次密集训练中改变units=2
,它应该会起作用。还请注意,您正在使用softmax
激活,在这种情况下,您应该更喜欢使用category\u crossentropy
loss
要使用
binary\u crossentropy
进行二进制分类,您应该有units=1
,sigmoid
激活,标签应该是(1062,1)
或(1062,)
,这意味着它们是0-1编码的。谢谢您的建议。我尝试了以下方法:将最后一层密度更改为1,使用了带有二进制交叉熵的“sigmoid”激活,而不是一个热编码,只使用了二进制编码值向量(num[1:1062]11 11 11 11…),我得到了另一个错误:py_调用impl中的错误(可调用,dots$args,dots$keywords):UnboundLocalError:之前引用的局部变量“a”assignment@MarekPrachař这看起来像是tensorflow或keras的不兼容版本,您应该尝试这两个版本的最新版本(tf 1.13和keras 2.2.4)。好的,看来tensorflow版本1.13存在问题,可以通过以下方法解决:安装_tensorflow(version=“1.12”)在那之后它开始工作了!非常感谢。