收到的标签值1超出有效范围[0,1)-Python,Keras
keras
machine-learning
python
5
0

我正在使用使用带有tensorflow背景的keras的简单cnn分类器。

def cnnKeras(training_data, training_labels, test_data, test_labels, n_dim):
  print("Initiating CNN")
  seed = 8
  numpy.random.seed(seed)
  model = Sequential()
  model.add(Convolution2D(64, 1, 1, init='glorot_uniform', 
   border_mode='valid',input_shape=(16, 1, 1), activation='relu'))
  model.add(MaxPooling2D(pool_size=(1, 1)))
  model.add(Convolution2D(32, 1, 1, init='glorot_uniform', 
   activation='relu'))
  model.add(MaxPooling2D(pool_size=(1, 1)))
  model.add(Dropout(0.25))
  model.add(Flatten())
  model.add(Dense(128, activation='relu'))
  model.add(Dropout(0.5))
  model.add(Dense(64, activation='relu'))
  model.add(Dense(1, activation='softmax'))
  # Compile model
  model.compile(loss='sparse_categorical_crossentropy',
              optimizer='adam', metrics=['accuracy'])
  model.fit(training_data, training_labels, validation_data=(
    test_data, test_labels), nb_epoch=30, batch_size=8, verbose=2)

  scores = model.evaluate(test_data, test_labels, verbose=1)
  print("Baseline Error: %.2f%%" % (100 - scores[1] * 100))
  # model.save('trained_CNN.h5')
  return None

这是一个二进制分类问题,但我不断收到此消息: Received a label value of 1 which is outside the valid range of [0, 1) ,这对我来说没有任何意义。有什么建议吗?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

Range [0, 1)表示0到1之间的每个数字( 不包括 1)。因此1不在[0,1)范围内。

我不确定100%,但是问题可能是由于您选择了损失函数。对于二进制分类, binary_crossentropy应该是一个更好的选择。

收藏
评论

在最后一个Dense层中,您使用了model.add(Dense(1, activation='softmax')) 。这里1将其值限制为[0, 1)将其形状更改为最大输出标签。例如,您的输出来自标签[0,7)则使用model.add(Dense(7, activation='softmax'))

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号