首页 > 解决方案 > 当输出正常时,Tensorflow 总是给我相同的结果

问题描述

我希望你今天过得愉快!

我最近尝试使用 TensorFlow 训练回归模型,并按照此处的说明完成了我的代码。

data = pd.read_csv('regret.csv')
max_regret = data['regret'].max()
data['regret'] = data['regret'] / max_regret  # Normalize Regrets

regret_labels = data.pop('regret')

def build_model():
    model = keras.Sequential([
        layers.Dense(64, activation='relu', input_shape=[len(data.keys())]),
        layers.Dense(64, activation='relu'),
        layers.Dense(1)
    ])

    optimizer = tf.keras.optimizers.RMSprop(0.001)

    model.compile(loss='mse',
                  optimizer=optimizer,
                  metrics=['mae', 'mse'])
    return model

model = build_model()

class PrintDot(keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs):
        if epoch % 100 == 0: print('')
        print('.', end='')

EPOCHS = 1000
# early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=100)
history = model.fit(
    data, regret_labels,
    epochs=EPOCHS, validation_split=0.2, verbose=0,
    callbacks=[PrintDot()])
test = model.predict(data)
loss, mae, mse = model.evaluate(data, regret_labels, verbose=2)

但是,我遇到了一个问题,即所有预测都是相同的,即使 model.evaluate() 通过试验给了我不同的统计数据。

在此处输入图像描述

我还通过此链接附加了文件。

你能看看它并给我一些解决它的想法吗?提前致谢!

标签: pythontensorflow

解决方案


您可以尝试以下方法,在适合模型之前将您的数据集拆分为训练集和测试集。您可以尝试以下方法,在适合模型之前将您的数据集拆分为训练集和测试集。

      import pandas as pd
      import keras
      from keras.models import Sequential
      from keras.layers.core import Dense
      from keras.optimizers import RMSprop

      data = pd.read_csv('regret.csv')
      max_regret = data['regret'].max()
      data['regret'] = data['regret'] / max_regret
      len(data.keys())
      data

      train_dataset = data.sample(frac=0.8,random_state=0)
      test_dataset = data.drop(train_dataset.index)

      train_labels = train_dataset.pop('regret')
      test_labels = test_dataset.pop('regret')

      def build_model():

           model = Sequential()
           model.add(Dense(64, activation='relu', input_shape=(27,)))
           model.add(Dense(64, activation='relu'))
           model.add(Dense(1))

      optimizer = RMSprop(0.001)

      model.compile(loss='mse',
                   optimizer=optimizer,
                   metrics=['mae', 'mse'])
      return model

      model = build_model()

      class PrintDot(keras.callbacks.Callback):
           def on_epoch_end(self, epoch, logs):
                if epoch % 100 == 0: print('')
                    print('.', end='')

      EPOCHS = 1000

      early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=100)
      history = model.fit(
          train_dataset, train_labels,
          epochs=EPOCHS, validation_split=0.2, verbose=0,
          callbacks=[PrintDot()])

      test = model.predict(test_dataset)

结果略有变化,如下所示: 在此处输入图像描述

您可以做得更好的是最小最大缩放所有属性。

希望它可以帮助你。


推荐阅读