Python 为什么可以';我的神经网络模型&x27;在这个训练集上,s的准确度可以提高吗?

Python 为什么可以';我的神经网络模型&x27;在这个训练集上,s的准确度可以提高吗?,python,tensorflow,machine-learning,keras,neural-network,Python,Tensorflow,Machine Learning,Keras,Neural Network,我有一个简单的训练集,有3节课,准确度总是1/3=0.333。。。有人能解释一下为什么这个网络在这台电视机上总是有1/3的准确度吗 我自己做了一个训练神经网络的实现,如果我使用一个高历元值(比如500),任何输入的输出都是[0.333..0.333..0.333..0.333..],所以我认为实现有问题,但使用keras(见下文)似乎会得到同样的结果 # TensorFlow and tf.keras import tensorflow as tf # Helper libraries imp

我有一个简单的训练集,有3节课,准确度总是1/3=0.333。。。有人能解释一下为什么这个网络在这台电视机上总是有1/3的准确度吗

我自己做了一个训练神经网络的实现,如果我使用一个高历元值(比如500),任何输入的输出都是[0.333..0.333..0.333..0.333..],所以我认为实现有问题,但使用keras(见下文)似乎会得到同样的结果

# TensorFlow and tf.keras
import tensorflow as tf

# Helper libraries
import numpy as np
import matplotlib.pyplot as plt

# data
x_train = np.array([[1,1], [2,1], [3,1], [4,1], [1,2], [1,3], [1,4], [2,2], [2,3], [3,3],
                    [4,2], [4,4], [4,5], [3,5], [5,2], [5,3], [5,4], [6,1], [3,6], [6,4],
                    [5,0], [6,0], [3,-1], [4,-1], [5,-1], [6,-1], [3,-2], [4,-2], [5,-2], [6,-2]], dtype=float)

y_train = np.array([[1,0,0], [1,0,0], [1,0,0], [1,0,0], [1,0,0], [1,0,0], [1,0,0], [1,0,0], [1,0,0], [1,0,0],
                  [0,1,0], [0,1,0], [0,1,0], [0,1,0], [0,1,0], [0,1,0], [0,1,0], [0,1,0], [0,1,0], [0,1,0],
                  [0,0,1], [0,0,1], [0,0,1], [0,0,1], [0,0,1], [0,0,1], [0,0,1], [0,0,1], [0,0,1], [0,0,1]], dtype=float)

x_train[:10,0] = x_train[:10,0] - 5
x_train[10:20,:] = x_train[10:20,:] + 5

# normalization
x_train[:,0] = (x_train[:,0] - np.average(x_train[:,0]))/np.amax(x_train[:,0])
x_train[:,1] = (x_train[:,1] - np.average(x_train[:,1]))/np.amax(x_train[:,1])

model = tf.keras.Sequential([
    tf.keras.layers.Dense(5, activation='sigmoid'),
    tf.keras.layers.Dense(5, activation='sigmoid'),
    tf.keras.layers.Dense(3)
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=10)

# plot
plt.scatter(x_train[0:10,0], x_train[0:10,1], marker='x')
plt.scatter(x_train[10:20,0], x_train[10:20,1], marker='o')
plt.scatter(x_train[20:30,0], x_train[20:30,1], marker='+')
plt.show()

您可以尝试调整超参数,例如使用
tf.keras.layers.Dense(5,activation='tanh')
中的'tanh'激活函数,而不是模型第一层中的'sigmoid',将精度从0.333提高到0.667。您还可以尝试添加各种层。
由于您有一个分类模型,您可以查看此文件以了解有关激活功能的详细信息

  • 您应该添加一个
    Softmax
    层作为最后一层
  • 确保您的标签是一个热编码(二进制向量)。您可以在标签上使用
    to_category()
    Keras方法。我看到你已经有了一个二进制向量,尽管数据类型是float。但我认为它的工作原理是这样的。所以第一步对你的问题来说更重要

  • 好的,谢谢