首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的准确率从训练一开始就很高?

为什么我的准确率从训练一开始就很高?
EN

Stack Overflow用户
提问于 2017-09-06 23:25:04
回答 2查看 2.3K关注 0票数 3

我正在训练一个神经网络来识别.png图片上的一些属性,当我开始训练的时候,我得到的东西是这样的,并且它一直在增加,直到时代结束:

代码语言:javascript
运行
复制
32/4817 [..............................] - ETA: 167s - loss: 0.6756 - acc: 0.5
64/4817 [..............................] - ETA: 152s - loss: 0.6214 - acc: 0.7  
96/4817 [..............................] - ETA: 145s - loss: 0.6169 - acc: 0.7 
128/4817 [.............................] - ETA: 142s - loss: 0.5972 - acc: 0.7 
160/4817 [.............................] - ETA: 140s - loss: 0.5734 - acc: 0.7 
192/4817 [>............................] - ETA: 138s - loss: 0.5604 - acc: 0.7 
224/4817 [>............................] - ETA: 137s - loss: 0.5427 - acc: 0.7 
256/4817 [>............................] - ETA: 135s - loss: 0.5160 - acc: 0.7 
288/4817 [>............................] - ETA: 134s - loss: 0.5492 - acc: 0.7 
320/4817 [>............................] - ETA: 133s - loss: 0.5574 - acc: 0.7 
352/4817 [=>...........................] - ETA: 131s - loss: 0.5559 - acc: 0.7 
384/4817 [=>...........................] - ETA: 129s - loss: 0.5550 - acc: 0.7 
416/4817 [=>...........................] - ETA: 128s - loss: 0.5504 - acc: 0.7 
448/4817 [=>...........................] - ETA: 127s - loss: 0.5417 - acc: 0.7 
480/4817 [=>...........................] - ETA: 126s - loss: 0.5425 - acc: 0.7 

我的问题是,为什么启动精度如此之高?我认为它应该在0.1左右,然后在学习的过程中不断增加。

另外,在最后我得到:

代码语言:javascript
运行
复制
('Test loss:', 0.42451223436727564)
('Test accuracy:', 0.82572614112830256)

这是不是测试损失太大了?

这是我的网络:

代码语言:javascript
运行
复制
input_shape = x_train[0].shape
print(input_shape)
model = Sequential()

stoplearn = keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, 
patience=0, verbose=0, mode='auto')

model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=20,
          verbose=1,
          validation_data=(x_test, y_test),
          callbacks=[stoplearn])
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

它是使用Keras用Python编写的。

EN

回答 2

Stack Overflow用户

发布于 2017-09-06 23:46:17

您将数据分为两类(因为您的输出层的大小为2),因此0.5的精度并不高。实际上,这意味着你的网络行为是随机的,这是你一开始所期望的。关于损失,没有绝对的答案。您的测试精度似乎还不错,您可以尝试使用一些参数(例如,对完全连接的层采用较小的大小),看看是否可以提高它。

票数 5
EN

Stack Overflow用户

发布于 2017-09-07 14:45:44

你有两个类。随机选择将导致50%的准确率。这就是你在一开始得到的。因此,您的结果是可以预期的。

它直接跳到70%准确率的原因可能是你的问题很简单。

如果你想再检查一遍,你可以

  1. 使用其他分类器,
  2. 检查使用了多少个示例来计算准确率,
  3. 序列化训练的分类器并手动将新示例提供给它并检查其结果
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46079058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档