线性分类器Tensorflow2不训练(1个神经元模型)

时间:2019-11-21 10:26:32

标签: python tensorflow classification tensorflow2.0

我目前正在研究CIFAR-10数据集,这是一个具有10个类别的图像分类问题。

我已经开始使用Tensorflow 2开发没有LinearClassifier对象的线性分类。

  • X形状对应于32 * 32像素的10000张图像RBG =(10000,3072)
  • Y_one_hot是一个热门向量=(10000,10)

模型创建代码:

model = tf.keras.Sequential()
model.add(Dense(1, activation="linear", input_dim=32*32*3))
model.add(Dense(10, activation="softmax", input_dim=1))
model.compile(optimizer="adam", loss="mean_squared_error", metrics=["accuracy"])

培训代码:

model.fit(X, Y_one_hot, batch_size=10000, verbose=1, epochs=100)

预测代码:

img = X[0].reshape(1, 3072) # Select image 0
res = np.argmax((model.predict(img))) # select the max in output 

问题:

res值始终相同。看来我的模型没有学习。

Model.summary

摘要显示:

dense (Dense)                (None, 1)                 3073      
dense_1 (Dense)              (None, 10)                20        
Total params: 3,093
Trainable params: 3,093
Non-trainable params: 0

准确度和损失:

Epoch 1/100
10000/10000 [==============================] - 2s 184us/sample - loss: 0.0949 - accuracy: 0.1005

Epoch 50/100
10000/10000 [==============================] - 0s 10us/sample - loss: 0.0901 - accuracy: 0.1000

Epoch 100/100
10000/10000 [==============================] - 0s 8us/sample - loss: 0.0901 - accuracy: 0.1027

您知道为什么我的模型总是预测相同的值吗?

谢谢

1 个答案:

答案 0 :(得分:1)

一句话:

您使用的损失loss="mean_squared_error"并非用于分类。是为了回归。两个非常不同的问题。尝试交叉熵。例如

`model.compile(optimizer=AdamOpt, 
      loss='categorical_crossentropy', metrics=['accuracy'])`

您可以在此处找到示例:https://github.com/michelucci/oreilly-london-ai/blob/master/day1/Beginner%20friendly%20networks/First_Example_of_a_CNN_(CIFAR10).ipynb。是我用于培训的笔记本。该网络是CNN,但您可以随自己的网络进行更改。

尝试...

祝你好运,翁贝托