我正在尝试根据某些属性(例如前卫形式与圆形形式)对几何形状进行分类。我的网络的输出总是[1, 0] 或 [0, 1],即使预测是错误的。有没有办法获得有用的 softmax 输出(例如,如果预测不确定,则为 [0.6, 0.4])?理想情况下,我想通过 softmax 输出的值读取形状属性的“明显性”(例如 [1, 0] -> “形状非常圆。” vs. [0.6, 0.4] -> “形状有点圆。”)。
您可以在下面的代码中找到我的模型的架构。
如果有人可以帮助我解决这个问题,我会非常高兴,因为这是我的第一个机器学习项目。
最好的问候, 瓦伦丁
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D
import pickle
import numpy as np
import tensorflowjs as tfjs
X = pickle.load(open("Round.pickle", "rb"))
Y = pickle.load(open("Round.pickle", "rb"))
X = np.array(X/255.0)
Y = np.array(Y)
model = Sequential()
model.add(Conv2D(64, (3,3), input_shape = X.shape[1:]))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size = (2,2)))
#model.add(Conv2D(64, (3,3)))
#model.add(Activation("relu"))
#model.add(MaxPooling2D(pool_size = (2,2)))
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation("relu"))
model.add(Dense(512))
model.add(Activation("relu"))
model.add(Dense(2))
model.add(Activation("softmax"))
optimizer = tf.keras.optimizers.Adam(learning_rate=0.1)
model.compile(loss = "categorical_crossentropy",
optimizer = optimizer,
metrics = ['accuracy'])
model.fit(X, Y, batch_size = 8, epochs = 5, validation_split = 0.1)
model.save('Round.model')