首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时在分类器神经网络模型中使用"accuracy“字符串或tf.keras.metrics.Accuracy()

何时在分类器神经网络模型中使用"accuracy“字符串或tf.keras.metrics.Accuracy()
EN

Stack Overflow用户
提问于 2021-09-21 14:52:19
回答 1查看 104关注 0票数 1

我正在学习神经网络,我有一个关于度量的问题。在我正在读的书中,它说我可以在model.compile()中使用一个字符串或函数的全名作为“度量”,比如bellow。我在用谷歌Colab Research。

代码语言:javascript
复制
model.compile(loss=tf.keras.losses.binary_crossentropy, 
          optimizer=tf.keras.optimizers.Adam(), 
          metrics=["accuracy"])

model.compile(loss=tf.keras.losses.binary_crossentropy, 
          optimizer=tf.keras.optimizers.Adam(), 
          metrics=[tf.keras.metrics.Accuracy()])

但是当我运行model.evaluate()时,我得到的总是非常不同的数字,比如:

代码语言:javascript
复制
# metrics=tf.keras.metrics.Accuracy()
print(model.evaluate(X_test, y_test))
25/25 [==============================] - 0s 1ms/step - loss: 0.0084 - accuracy: 0.0000e+00
[0.008412548340857029, 0.0]

# metrics="accuracy"
print(model.evaluate(X_test, y_test))
25/25 [==============================] - 0s 1ms/step - loss: 0.0078 - accuracy: 1.0000
[0.00784504134207964, 1.0]

我知道当我重新启动模型时,我会得到不同的随机权重,但当我使用完整的函数路径时,我总是会得到这个0.0000e+00。我不想知道为什么以及何时使用字符串和完整的函数名。

代码如下:

代码语言:javascript
复制
from  sklearn.datasets          import make_circles
from  sklearn.model_selection   import train_test_split

import tensorflow         as tf

n_samples = 1000
X, y = make_circles(n_samples, noise=0.03, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(10, activation=tf.keras.activations.relu, input_shape=(2,)))
model.add(tf.keras.layers.Dense(10, activation=tf.keras.activations.relu))
model.add(tf.keras.layers.Dense(1, activation=tf.keras.activations.sigmoid))

model.compile(loss=tf.keras.losses.binary_crossentropy, 
              optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), 
              metrics="accuracy")

hist = model.fit(X_train, y_train, epochs=100, verbose=0)

print(model.evaluate(X_test, y_test))
EN

回答 1

Stack Overflow用户

发布于 2021-09-21 19:38:06

在这种情况下,似乎'accuracy'实际上对应于tf.keras.metrics.BinaryAccuracy(),请参见下面的代码。

代码语言:javascript
复制
from sklearn.datasets import make_circles
from sklearn.model_selection import train_test_split
import tensorflow as tf

n_samples = 1000
X, y = make_circles(n_samples, noise=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(10, activation=tf.keras.activations.relu, input_shape=(2, )))
model.add(tf.keras.layers.Dense(10, activation=tf.keras.activations.relu))
model.add(tf.keras.layers.Dense(1, activation=tf.keras.activations.sigmoid))

model.compile(
    loss=tf.keras.losses.binary_crossentropy,
    optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
    metrics=['accuracy', tf.keras.metrics.BinaryAccuracy(name='binary_accuracy')]
)

model.fit(X_train, y_train, epochs=100, verbose=1)
# Epoch 1/100
# 25/25 [==============================] - 0s 678us/step - loss: 0.3403 - accuracy: 0.8562 - binary_accuracy: 0.8562
# Epoch 2/100
# 25/25 [==============================] - 0s 792us/step - loss: 0.3401 - accuracy: 0.8625 - binary_accuracy: 0.8625
# Epoch 3/100
# 25/25 [==============================] - 0s 748us/step - loss: 0.3406 - accuracy: 0.8575 - binary_accuracy: 0.8575
# ....

print(model.evaluate(X_test, y_test))
# [0.5954229235649109, 0.7200000286102295, 0.7200000286102295]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69271095

复制
相关文章

相似问题

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