【问题标题】:Is keras exclusive to binary output only? When I set my y output to non binary my accuracy becomes zero, keras, tensorlowkeras 是否仅适用于二进制输出?当我将 y 输出设置为非二进制时,我的精度变为零,keras,tensorlow
【发布时间】:2021-12-15 22:08:03
【问题描述】:

当我将 y 设置为二进制值 [0,1] 时,我的准确度很高,但是当我将它设置为非二进制 [1,2,3] 值时,我的准确度为 0。 Keras 是否仅适用于二进制文件?

from keras.models import Sequential
from keras.layers import Dense
import numpy
from numpy import loadtxt
# fix random seed for reproducibility
numpy.random.seed(7)

numpy.random.seed(7)

dataset = loadtxt('Trial.csv', delimiter=',')
# split into input (X) and output (Y) variables
# split into input (X) and output (y) variables
X = dataset[:,0:2]
Data_1 = X.astype('float32')
y = dataset[:,3]
Data_2 = y.astype("float32")
# define the keras model
model = Sequential()
model.add(Dense(64, input_dim=2, activation='sigmoid'))
model.add(Dense(64, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))
# compile the keras model
model.compile(loss='mean_squared_logarithmic_error', optimizer='adam', metrics=['accuracy'])
# fit the keras model on the dataset
model.fit(Data_1, Data_2, epochs=15, batch_size=100)
# evaluate the keras model
_, accuracy = model.evaluate(Data_1, Data_2)
print('Accuracy: %.2f' % (accuracy*100))

【问题讨论】:

  • activation='sigmoid'[0, 1] 范围内输出实数值,所以它永远不会输出 2 或 3
  • 输出函数需要是softmax并且你需要和label一样多的神经元。我建议您在进行编码之前更好地了解神经网络的工作原理。主要是架构和激活函数。

标签: python tensorflow keras


【解决方案1】:

这是因为模型的最后一层将数据集分类为二进制输出,这对于分类 2 类是正确的。

model.add(Dense(1, activation='sigmoid'))  # Here it's assuming Binary output

如果您将final dense layer 的单位更改为 1 以外(或根据类数)并将激活函数更改为'Softmax',您将有不同的多类分类输出范围。

model.add(Dense(num_of_classes, activation='softmax'))

对于其他 Dense 层,还将激活函数更改为 'relu'

model.add(Dense(64, input_dim=2, activation='relu'))
model.add(Dense(64, activation='relu'))

为了更好的理解,请查看this类似问题。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 2018-04-09
    • 2021-05-02
    • 1970-01-01
    • 2020-07-20
    • 2020-09-08
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多