【问题标题】:How to train a neural network with a single digit output?如何训练具有单个数字输出的神经网络?
【发布时间】: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


【解决方案1】:
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="relu", 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)


可能会更好

【讨论】:

    猜你喜欢
    • 2013-03-19
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2021-07-30
    • 2017-04-24
    • 1970-01-01
    相关资源
    最近更新 更多