keras ValueError:无法将NumPy数组转换为Tensor(不支援的对象类型int)

2eafrhcq  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(249)

我尝试调整MLP序列模型的超参数,但在执行此任务时出现错误。我尝试降级/升级scikit-learn版本并使用np.asarray(X).astype(np.int)np.asarray(X).astype(np.float32),但仍然出现错误。请帮助我修复此错误。谢谢。
使用np.asarray(X).astype(np.int/float32)后出错

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-184-8cee47d11b3d> in <module>
      1 x_norm_train=np.asarray(x_norm_train).astype(np.float32)
      2 
----> 3 y_train=np.asarray(y_train).astype(np.float32)

TypeError: float() argument must be a string or a number, not 'Timestamp'

下面是代码:

def mlp_tune():
    
    def create_model(layers, activation, optimizer):
        model = Sequential()
        for i, nodes in enumerate(layers):
            if i==0:
                model.add(Dense(nodes, input_dim = x_norm_train.shape[1]))
                model.add(Activation(activation))
            else:
                model.add(Dense(nodes))
                model.add(Activation(activation))
        model.add(Dense(1, activation = 'linear')) # Note: no activation beyond this point
        
        model.compile(optimizer = optimizer, loss='mse')
        # optimizers.Adam(learning_rate = rate, beta_1 = 0.9, \
        #                       beta_2 = 0.999, amsgrad=False)
        return model
    
    model = KerasRegressor(build_fn = create_model, verbose=1)

    # specifying layer architecture
    optimizer = ['adam', 'rmsprop', 'sgd','adagrad', 'adadelta'] 
    layers = [(3,), (10,), (30,), (10, 10), (10, 20), (20, 20), \
              (30, 30), (10, 10, 10), (20, 20, 20), \
                  (30, 30, 30), (10, 20, 30), (20, 20, 30)]
    activations = ['relu', 'tanh', 'sigmoid']
    param_grid = dict(layers=layers, optimizer = optimizer, activation=activations, \
                      batch_size = [10, 50, 100], epochs=[10, 50])
    grid = GridSearchCV(estimator = model, param_grid = param_grid,\
                        scoring='neg_mean_squared_error')
    
    
    grid_result = grid.fit(x_norm_train, y_train)
    
    [grid_result.best_score_, grid_result.best_params_]
    
    testPredict = grid.predict(x_norm_test)
    
    # model evaluation
    print()
    print(mean_squared_error(y_test, testPredict))
    print()
   
    # list all the data in history
    print(history.history.keys())
    
    # summarize history for accuracy
    plt.figure(figsize=(12, 8))
    plt.plot(grid_result.history['mean_squared_error'])
    plt.plot(grid_result.history['val_mean_squared_error'])
    plt.title('MLP Model Accuracy (After Hyperparameter tuning)', fontsize=18, y=1.03)
    plt.ylabel('Accuracy')
    plt.xlabel('Epoch')
    plt.legend(['train', 'test'], loc='best')
    plt.savefig("4 mlp model accuracy after tuning.png", dpi=300)
    plt.show()
    
    
    # summarize history for loss
    plt.figure(figsize = (12, 8))
    plt.plot(grid_result.history['loss'])
    plt.plot(grid_result.history['val_loss'])
    plt.title('MLP Model Loss (After Hyperparameter tuning)', fontsize=18, y=1.03)
    plt.ylabel('Loss')
    plt.xlabel('Epoch')
    plt.legend(['train', 'test'], loc='best')
    plt.savefig("5 mlp model loss after tuning.png", dpi=300)
    plt.show()
    
    # prepare data for plotting
    y = y_test[:]
    y.reset_index(inplace=True)
    y.drop(['index'], axis = 1, inplace=True) 
    
    
    # plotting the results
    sns.set_context('notebook', font_scale= 1.5)
    plt.figure(figsize=(20, 10))
    plt.plot(y['surge'])
    plt.plot(testPredict, color= 'red')
    plt.legend(['Observed Surge', 'Predicted Surge'],fontsize = 14)
    plt.ylabel('Surge Height (m)')
    plt.title("Observed vs. Predicted Storm Surge Height", fontsize=20, y=1.03)
    plt.savefig("6 mlp observed vs predicted surge height (after tuning).png", dpi=300)
    plt.show()

错误

ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type int).

9rnv2umw

9rnv2umw1#

对可能出错的错误数据进行预处理;请确保所有内容的格式都正确。
下面显示了模型预期的输入内容:

[print(i.shape, i.dtype) for i in model.inputs]
[print(o.shape, o.dtype) for o in model.outputs]
[print(l.name, l.input_shape, l.dtype) for l in model.layers]

按照模型的预期将数据传递给模型。谢谢。

相关问题