如何解决TypeError:“ numpy.float64”对象无法解释为整数

时间:2020-10-29 04:54:41

标签: python numpy classification

我正在使用深度信念概念来训练和测试数据集。使用numpy.float64时遇到错误:

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.neural_network import MLPClassifier
from sklearn.neural_network import BernoulliRBM
  


def Deep_belief_network(X,*args):
  x,y,regularization_nn,learning_rate_RBM,learning_rate_nn,n_iter_RBM,batch_size_RBM,batch_size_nn,n_iter_nn=args
  n_components_RBM,n_components_nn_=X
  #n_components_RBM=50
  #n_components_nn_=20
  rbm_model_1=BernoulliRBM(n_components=n_components_RBM,n_iter=n_iter_RBM,learning_rate=learning_rate_RBM,batch_size=batch_size_RBM,verbose=0)
  X_train, X_test, Y_train, Y_test = train_test_split(x,y, test_size=0.1, random_state=0)
  min_max_scaler = MinMaxScaler()
  X_train = min_max_scaler.fit_transform(X_train)
  rbm_train=rbm_model_1.fit_transform(X_train )
  nn_model=MLPClassifier(activation='relu', solver='sgd', alpha=regularization_nn,
      batch_size=batch_size_nn, hidden_layer_sizes=(n_components_nn_), learning_rate='constant',
      learning_rate_init=learning_rate_nn, max_iter=n_iter_nn,shuffle=True, validation_fraction=0.1, verbose=False,random_state=1)
  nn_model.fit(rbm_train,Y_train)


X= [[0.00000000e+00 1.76100000e+03 3.02434414e-02 ... 1.00505479e+01
  6.90634415e+00 1.13641060e+01]
 [1.00000000e+00 5.54300000e+03 3.32540176e-01 ... 9.66597699e+01
  7.81453418e+01 2.94180046e+02]
 [2.00000000e+00 3.44800000e+03 1.35616750e-01 ... 2.77757100e+01
  2.95552513e+01 6.49203725e+01]
 ...
 [5.85600000e+03 3.37100000e+03 1.99433359e-01 ... 1.82494245e+01
  2.96294395e+01 4.89311229e+01]
 [5.85700000e+03 4.59700000e+03 3.33133906e-01 ... 4.38591971e+01
  6.63558086e+01 5.51086311e+01]
 [5.85800000e+03 4.82800000e+03 3.91628974e-01 ... 6.50556871e+01
  1.02210562e+02 5.93112050e+01]]
Y= [0. 0. 0. ... 1. 1. 1.]
X_train =[[-0.78210062  0.14111439 -0.3656736  ... -0.06997126 -0.14909763
  -0.54753418]
 [-0.51177349 -0.77928848 -0.47345634 ... -0.24668018 -0.17406007
  -0.67165109]
 [ 0.07797737 -0.54963283 -0.45941915 ... -0.26573143 -0.21174211
  -0.61647054]
 ...
 [-0.75134129 -1.29734889 -0.59546654 ... -0.328803   -0.25774714
  -0.69402226]
 [-0.18702603 -0.3460879  -0.58283771 ... -0.24237006 -0.26603587
  -0.59759254]
 [-0.11308535 -0.82498224 -0.50012261 ... -0.3001251  -0.22795859
  -0.64925682]]

我不知道为什么会出现此错误。是尺寸问题吗?我是python新手,请帮助我。

这是我在运行代码时收到的回溯错误:

     Traceback (most recent call last)
<ipython-input-44-a2940e738482> in <module>()
      1 if __name__ == '__main__':
----> 2     main(X,Y,X_train,Y_train)

5 frames
<ipython-input-43-5182266968ae> in main(X, Y, X_train, Y_train)
     26       best_alpha=swarm.g
     27       '''
---> 28   xopt,fopt=pso(Deep_belief_network,[6,15],[12,60],args=args,maxiter=3,debug=True,swarmsize=60,minstep=0)
     29   print(xopt,fopt)
     30   acc=Deep_belief_network(x=0.00010482,*args)

/usr/local/lib/python3.6/dist-packages/pyswarm/pso.py in pso(func, lb, ub, ieqcons, f_ieqcons, args, kwargs, swarmsize, omega, phip, phig, maxiter, minstep, minfunc, debug)
    109 
    110         # Calculate the objective's value at the current particle's
--> 111         fp[i] = obj(p[i, :])
    112 
    113         # At the start, there may not be any feasible starting point, so just

/usr/local/lib/python3.6/dist-packages/pyswarm/pso.py in <lambda>(x)
     72 
     73     # Check for constraint function(s) #########################################
---> 74     obj = lambda x: func(x, *args, **kwargs)
     75     if f_ieqcons is None:
     76         if not len(ieqcons):

<ipython-input-42-2d0aad95eafd> in Deep_belief_network(X, *args)
     12   min_max_scaler = MinMaxScaler()
     13   X_train = min_max_scaler.fit_transform(X_train)
---> 14   rbm_train=rbm_model_1.fit_transform(X_train )
     15   nn_model=MLPClassifier(activation='relu', solver='sgd', alpha=regularization_nn,
     16       batch_size=batch_size_nn, hidden_layer_sizes=(n_components_nn_), learning_rate='constant',

/usr/local/lib/python3.6/dist-packages/sklearn/base.py in fit_transform(self, X, y, **fit_params)
    569         if y is None:
    570             # fit method of arity 1 (unsupervised transformation)
--> 571             return self.fit(X, **fit_params).transform(X)
    572         else:
    573             # fit method of arity 2 (supervised transformation)

/usr/local/lib/python3.6/dist-packages/sklearn/neural_network/_rbm.py in fit(self, X, y)
    342 
    343         self.components_ = np.asarray(
--> 344             rng.normal(0, 0.01, (self.n_components, X.shape[1])),
    345             order='F')
    346         self.intercept_hidden_ = np.zeros(self.n_components, )

mtrand.pyx in numpy.random.mtrand.RandomState.normal()

_common.pyx in numpy.random._common.cont()

TypeError: 'numpy.float64' object cannot be interpreted as an integer

1 个答案:

答案 0 :(得分:1)

n_components_RBM(也许还有n_components_nn_)可能不是整数,而是浮点数。您可以使用以下类似的方法将其转换为整数,然后再将其传递给BernoulliRBM

n_components_RBM, n_components_nn_ = X
n_components_RBM = int(n_components_RBM)
n_components_nn_ = int(n_components_nn_)

或者您可以将整数列表X作为函数的参数传递。