问题描述
我正在Jupyter Notebook(Python 3.6)中运行Keras神经网络模型
I'm running a Keras neural network model in Jupyter Notebook (Python 3.6)
我收到以下错误
从Keras.model调用.fit()方法后
after calling the .fit() method from Keras.model
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和六个模块版本都是最新的.
I checked the requirements.txt file for Keras (in Anaconda3) and the numpy, scipy, and six module versions are all up to date.
什么可以解释此AttributeError?
What can explain this AttributeError?
以下是完整的错误消息(似乎与Numpy有点相关):
The full error message is the following (seems to be somewhat related to Numpy):
〜\ Anaconda3 \ lib \ site-packages \ keras \ models.py in fit(self,x,y, batch_size,纪元,冗长,回调,validation_split, validate_data,随机播放,class_weight,sample_weight,initial_epoch, steps_per_epoch,validation_steps,** kwargs) 第963章 964 steps_per_epoch = steps_per_epoch, -> 965个validation_steps = validation_steps) 966 967 def评估(self,x = None,y = None,
~\Anaconda3\lib\site-packages\keras\models.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) 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,epoch,冗长,回调,validation_split, validate_data,随机播放,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 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 # Prepare validation data. 1595 do_validation = False
〜\ Anaconda3 \ lib \ site-packages \ keras \ engine \ training.py在 _standardize_user_data(自身,x,y,sample_weight,class_weight,check_batch_axis,batch_size)1424
self._feed_input_shapes,1425年
check_batch_axis = False, -> 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_user_data(self, x, y, sample_weight, class_weight, check_batch_axis, batch_size) 1424
self._feed_input_shapes, 1425
check_batch_axis=False, -> 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在 _standardize_input_data(数据,名称,形状,check_batch_axis,exception_prefix) 68 Elif isinstance(数据,列表): 69 data = [x.values if x. class . name =='DataFrame'else x for data in x] ---> 70数据= [np.expand_dims(x,1),如果x不为None且x.ndim == 1否则x表示数据中的x] 其他71条: 72数据=数据.如果是数据.类.名称 =='DataFrame'否则为数据
~\Anaconda3\lib\site-packages\keras\engine\training.py in _standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix) 68 elif isinstance(data, list): 69 data = [x.values if x.class.name == 'DataFrame' else x for x in data] ---> 70 data = [np.expand_dims(x, 1) if x is not None and x.ndim == 1 else x for x in data] 71 else: 72 data = data.values if data.class.name == 'DataFrame' else data
〜\ Anaconda3 \ lib \ site-packages \ keras \ engine \ training.py在 (.0) 68 Elif isinstance(数据,列表): 69 data = [x.values if x. class . name =='DataFrame'else x for data in x] ---> 70数据= [np.expand_dims(x,1),如果x不为None并且x.ndim == 1否则x表示数据中的x] 其他71条: 72数据=数据.如果是数据.类.名称 =='DataFrame'否则为数据
~\Anaconda3\lib\site-packages\keras\engine\training.py in (.0) 68 elif isinstance(data, list): 69 data = [x.values if x.class.name == 'DataFrame' else x for x in data] ---> 70 data = [np.expand_dims(x, 1) if x is not None and x.ndim == 1 else x for x in data] 71 else: 72 data = data.values if data.class.name == 'DataFrame' else data
AttributeError:列表"对象没有属性"ndim"
AttributeError: 'list' object has no attribute 'ndim'
推荐答案
model.fit
期望 x 和 y 是numpy数组.似乎您传递了一个列表,它试图通过读取numpy数组的ndim
属性来获得输入形状,但失败了.
model.fit
expects x and y to be numpy array. Seems like you pass a list, it tried to get shape of input by reading ndim
attribute of numpy array and failed.
您可以简单地使用np.array
对其进行转换:
You can simply transform it using np.array
:
import numpy as np
...
model.fit(np.array(train_X),np.array(train_Y), epochs=20, batch_size=10)
这篇关于Keras AttributeError:“列表"对象没有属性"ndim"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!