我正在Jupyter Notebook(Python 3.6)中运行Keras神经网络模型
我收到以下错误
从Keras.model 调用.fit()方法后AttributeError:'list'对象没有属性'ndim'
model = Sequential()
model.add(Dense(5, input_dim=len(X_data[0]), activation='sigmoid' ))
model.add(Dense(1, activation = 'sigmoid'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['acc'])
model.fit(X_data, y_data, epochs=20, batch_size=10)
我检查了Keras(在Anaconda3中)的requirements.txt文件,numpy,scipy和six模块版本都是最新的。
什么可以解释这个AttributeError?
完整的错误消息如下(似乎与Numpy有些相关):
----------------------------------------------- ---------------------------- AttributeError Traceback(最近一次调用 最后)in() 3 model.add(密集(1,激活='sigmoid')) 4 model.compile(loss ='mean_squared_error',optimizer ='adam',metrics = ['acc']) ----> 5 model.fit(X_data,y_data,epochs = 20,batch_size = 10)
适合的〜\ Anaconda3 \ lib \ site-packages \ keras \ models.py(self,x,y, batch_size,epochs,verbose,callbacks,validation_split, validation_data,shuffle,class_weight,sample_weight,initial_epoch, steps_per_epoch,validation_steps,** kwargs) 963 initial_epoch = initial_epoch, 964 steps_per_epoch = steps_per_epoch, - > 965 validation_steps = validation_steps) 966 967 def evaluate(self,x = None,y = None,
〜\ Anaconda3 \ lib \ site-packages \ keras \ engine \ training.py in fit(self,x, y,batch_size,epochs,verbose,callbacks,validation_split, validation_data,shuffle,class_weight,sample_weight,initial_epoch, steps_per_epoch,validation_steps,** kwargs)1591
class_weight = class_weight,1592 check_batch_axis = False, - > 1593 batch_size = batch_size)1594#准备验证数据。 1595 do_validation = False〜\ Anaconda3 \ lib \ site-packages \ keras \ engine \ training.py in _standardize_user_data(self,x,y,sample_weight,class_weight,check_batch_axis,batch_size)1424
self._feed_input_shapes,1425
check_batch_axis =假 - > 1426 exception_prefix ='input')1427 y = _standardize_input_data(y,self._feed_output_names,
1428 output_shapes,〜\ Anaconda3 \ lib \ site-packages \ keras \ engine \ training.py in _standardize_input_data(数据,名称,形状,check_batch_axis,exception_prefix) 68 elif isinstance(数据,列表): 69 data = [x.values if x。 class 。 name =='DataFrame'else x for x in data] ---> 70 data = [np.expand_dims(x,1)如果x不是None而x.ndim == 1则x为数据中的x] 71其他: 72 data = data.values if data。 class 。 name =='DataFrame'else data
〜\ Anaconda3 \ lib \ site-packages \ keras \ engine \ training.py in (0.0) 68 elif isinstance(数据,列表): 69 data = [x.values if x。 class 。 name =='DataFrame'else x for x in data] ---> 70 data = [np.expand_dims(x,1)如果x不是None而x.ndim == 1则x为数据中的x] 71其他: 72 data = data.values if data。 class 。 name =='DataFrame'else data
AttributeError:'list'对象没有属性'ndim'
答案 0 :(得分:25)
model.fit
期望 x 和 y 为numpy数组。好像你传递了一个列表,它试图通过读取numpy数组的ndim
属性来获得输入的形状并且失败了。
您可以使用np.array
简单地对其进行转换:
import numpy as np
...
model.fit(np.array(train_X),np.array(train_Y), epochs=20, batch_size=10)
答案 1 :(得分:1)
导入时,应使用tensorflow.keras
而不是像这样的keras
:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Input, Conv2D, MaxPool2D, Dense
因为存在与keras
模块相关的错误。
参考:here。
答案 2 :(得分:-1)
我不知道您的训练数据的形状,但我怀疑您input_dim
上有错误。尝试将其更改为input_dim=len(X_data)
,如下所示:
model = Sequential()
model.add(Dense(5, input_dim=len(X_data), activation='sigmoid' ))
model.add(Dense(1, activation = 'sigmoid'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['acc'])
model.fit(X_data, y_data, epochs=20, batch_size=10)