【问题标题】:Keras RMSE MAE findingKeras RMSE MAE 发现
【发布时间】:2021-02-18 02:24:39
【问题描述】:

我的代码有问题。如果您能提供帮助,我将非常高兴。 目的是具有不同时期和批量大小的平均绝对误差和均方根误差。我是深度学习的新手,所以我尝试过这样做。但是,我很困惑。

如何修复或重写此代码。非常感谢。

# Reading the file
df = pd.read_csv('data.csv')
df = df[df.columns.difference(['Unnamed: 0'])]
input_data =  df.iloc[:,:100].values
label_MOS = df['MOS'].values

train_X, val_X, train_y, val_y = train_test_split(input_data, 
   label_MOS, test_size = 0.25, random_state = 14)

x_train = train_X 
y_train = train_y
x_test =  val_X
y_test =  val_y

def create_model():
    model=Sequential()
    model.add(Dense(32,  input_dim=100, kernel_initializer='normal', activation='relu'))
    model.add(Dense(32, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))

    adam=Adam(learning_rate=0.1)
    model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mae'])
    return model

# Create the model
model = KerasClassifier(build_fn = create_model,verbose = 0)

# Define the grid search parameters
batch_size = [20]
epochs = [500,1000]
# Make a dictionary of the grid search parameters
param_grid = dict(batch_size = batch_size,epochs = epochs)
# Build and fit the GridSearchCV
grid = GridSearchCV(estimator = model,param_grid = param_grid,cv = KFold(),verbose = )
grid_result = grid.fit(x_train,y_train)
NNpredictions = model.predict(x_test)
MAE = mean_absolute_error(val_y , NNpredictions)
RMSE = mean_squared_error(val_y , NNpredictions, squared = False)
# Summarize the results
print(' MAE {}, RMSE {}'.format(MAE.best_score_,RMSE.best_params_))
mae = MAE.cv_results_['mae']
rmse = RMSE.cv_results_['rmse']
# params = grid_result.cv_results_['params']
for mean, stdev in zip(mae, rmse):
  print("mae %f rmse (%f) " % (mean, stdev))

【问题讨论】:

    标签: tensorflow keras scikit-learn


    【解决方案1】:

    我会这样做:

    batch_size = [20]
    epochs = [500,1000]
    
    result_list = list()
        for batch_value in batch_size:
            for epoch_value in epochs:
                model = create_model()
                model.fit(x=x_train,y=y_train,epochs=epoch_value, batch_size=batch_value)
                metrics = model.evaluate(x=x_test,y=y_test)
                ord_dic = collections.OrderedDict()
                ord_dic['batch_size'] = batch_value
                ord_dic['epochs'] = epoch_value
                ord_dic['metrics'] = metrics
                result_list.append(ord_dic)
    print(result_list)
    

    我已将结果放在有序词典列表中,但您可以轻松更改该部分

    【讨论】:

      【解决方案2】:

      我更新了代码

      from keras import backend as K
      
      def create_model(losses='mse'):
          model=Sequential()
          model.add(Dense(32,  input_dim=100, kernel_initializer='normal', activation='relu'))
          model.add(Dense(32, activation='relu'))
          model.add(Dense(1, activation='sigmoid'))
      
          adam=Adam(learning_rate=0.1)
          model.compile(optimizer=adam, loss=losses, metrics=['accuracy'])
          return model 
      
      def root_mean_squared_error(y_true, y_pred):
              return K.sqrt(K.mean(K.square(y_pred - y_true))) 
      
      batch_size = [20]
      epochs = [500,1000]
      losses = ['mse', root_mean_squared_error]
      neural_network = KerasClassifier(build_fn=network, verbose = 1)
      param_grid = dict(losses=losses, epochs=epochs, batch_size = batches)
      grid = GridSearchCV(estimator=neural_network, param_grid=param_grid )
      grid_result = grid.fit(X_train, y_train)
      print(grid_result.best_params_)
      

      create_model函数需要有一个损失参数,它是电网将通过参数的地方。

      【讨论】:

        猜你喜欢
        • 2020-01-05
        • 2019-02-18
        • 2017-10-06
        • 2020-04-05
        • 2021-11-21
        • 1970-01-01
        • 2018-08-21
        • 2020-09-18
        • 1970-01-01
        相关资源
        最近更新 更多