【发布时间】:2021-04-13 09:57:17
【问题描述】:
我的目标是使用 Tensorflow 构建一个神经网络,该网络接收一个 128 维向量作为输入并分配一个等级 (0.0-5.0)。
问题:无论我使用多少个 epoch,准确度都保持在 0.0
这是我目前得到的
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
import pickle
#Load data frame containing training data
with open("label_train_vector.txt", "rb") as f:
df_train = pickle.load(f)
#Transform training data to correct format
feature_train_list = df_train['feature_vector'].to_list()
train_input = np.array(feature_train_list)
train_label_rating = df_train['rating'].to_numpy()/5
rating_model = keras.Sequential([
keras.layers.Dense(64, activation="sigmoid", input_shape=(128,)),
keras.layers.Dense(1, activation="sigmoid")
])
rating_model.compile(optimizer='rmsprop', loss="mse", metrics=["accuracy"])
rating_model.fit(train_input, train_label_rating, epochs=10)
这段代码的输出是
Epoch 1/10
104/104 [==============================] - 1s 992us/step - loss: 0.0280 - accuracy: 0.0000e+00
Epoch 2/10
104/104 [==============================] - 0s 979us/step - loss: 0.0140 - accuracy: 0.0000e+00
Epoch 3/10
104/104 [==============================] - 0s 994us/step - loss: 0.0111 - accuracy: 0.0000e+00
Epoch 4/10
104/104 [==============================] - 0s 929us/step - loss: 0.0093 - accuracy: 0.0000e+00
Epoch 5/10
104/104 [==============================] - 0s 934us/step - loss: 0.0082 - accuracy: 0.0000e+00
Epoch 6/10
104/104 [==============================] - 0s 938us/step - loss: 0.0080 - accuracy: 0.0000e+00
Epoch 7/10
104/104 [==============================] - 0s 929us/step - loss: 0.0079 - accuracy: 0.0000e+00
Epoch 8/10
104/104 [==============================] - 0s 936us/step - loss: 0.0074 - accuracy: 0.0000e+00
Epoch 9/10
104/104 [==============================] - 0s 930us/step - loss: 0.0074 - accuracy: 0.0000e+00
Epoch 10/10
104/104 [==============================] - 0s 923us/step - loss: 0.0073 - accuracy: 0.0000e+00
在训练过程中准确率没有变化,但我不知道哪里出了问题。
【问题讨论】:
-
这不是正确的设置。尽管
sigmoid给出的输出介于 0 和 1 之间。你将如何预测大于 1 的值? -
我通过将评级标准化为 [0,1] 来调整您的观点,但同样的问题仍然存在。
-
如果这是一个回归问题(正如使用
loss="mse"所暗示的那样),准确性毫无意义,activation="sigmoid"是错误的。此外,我们不使用sigmoid激活中间层 - idownvotedbecau.se/noresearch
标签: python tensorflow machine-learning keras neural-network