Python Keras列表索引超出范围
我得到了这个模糊的错误,我无法找到在线解决方案。我试图制作这段代码,找出两个数字之间的关系。出于测试目的,我使用简单的数据,其中的关系是简单地添加5。以下是我的培训数据:-Python Keras列表索引超出范围,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,我得到了这个模糊的错误,我无法找到在线解决方案。我试图制作这段代码,找出两个数字之间的关系。出于测试目的,我使用简单的数据,其中的关系是简单地添加5。以下是我的培训数据:- 0,5 1,6 2,7 3,8 4,9 ... 现在,我正试图勾勒出一个简单的模型来完成我想做的事情。但是,它甚至没有到达代码的训练部分,只是以这个模糊的错误终止:- 2020-05-22 20:00:25.521151: I tensorflow/compiler/xla/service/service.cc:176]
0,5
1,6
2,7
3,8
4,9
...
现在,我正试图勾勒出一个简单的模型来完成我想做的事情。但是,它甚至没有到达代码的训练部分,只是以这个模糊的错误终止:-
2020-05-22 20:00:25.521151: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Host, Default Version
2020-05-22 20:00:25.523749: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-05-22 20:00:25.523805: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1108]
Traceback (most recent call last):
File "main.py", line 34, in <module>
history = model.fit(train_data, epochs=100, verbose=1)
File "/home/awesom
2020-05-22 20:00:25.521151: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Host, Default Version
2020-05-22 20:00:25.523749: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-05-22 20:00:25.523805: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1108]
Traceback (most recent call last):
File "main.py", line 34, in <module>
history = model.fit(train_data, epochs=100, verbose=1)
File "/home/awe_ruler/.local/lib/python3.7/site-packages/keras/engine/training.py", line 1239, in fit
validation_freq=validation_freq)
File "/home/awesome_ruler/.local/lib/python3.7/site-packages/keras/engine/training_arrays.py", line 141, in fit_loop
if issparse(fit_inputs[i]) and not K.is_sparse(feed[i]):
IndexError: list index out of range
我试着改变图层表示和调整其他东西,但错误依然存在。我认为问题可能出在我的训练数据上,但我不确定
这就是我的训练数据在输入模型时的样子:-
最初,它实际上是一个csv文件,但已转换为NumPy数组以便于使用。这可能是因为数组的格式不好,但我对此一无所知
我使用的是Tensorflow GPU版本2.2.0和Keras版本2.3。此外,我正在尝试使用CUDA 10.1,它是按照TensorFlow官方网站的说明安装的。我不知道我的错误还有什么其他原因。有人能解释一下吗?在您的培训数据中,第一列是输入,第二列是目标变量。在您提供的代码中,您将两者都视为am输入,而不提供目标变量 如果您将训练数据拆分为输入变量和目标变量,那么就训练过程而言,所有这些都会很好地工作,结果不会很好 下面是一个完整的工作示例:
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import Adam
X = np.random.randint(0, 100, 1500)
train_data = np.array([X, X+5])
def build_model():
model = Sequential([
Dense(1, input_shape=(1,), activation='relu', kernel_initializer='ones'),
Dense(1, activation='linear')])
return model
mymodel = build_model()
opt = Adam(lr=0.01, decay=0.009)
mymodel.compile(loss='mean_squared_error', optimizer=opt)
# fit model
history = mymodel.fit(x=train_data[0], y=train_data[1], epochs=50, verbose=1)
注:我模拟了训练数据,并在构建模型上更改了输入形状。您似乎只传递了X值,为什么不传递y值?两者都是训练神经网络所必需的。我觉得很难从这些信息中弄清楚到底发生了什么。您是否可以在文件:/home/awesome_rule/.local/lib/python3.7/site-packages/keras/engine/training_arrays.py的第141行添加一个pdb,看看什么是i?此外,训练数据应该由2个数组组成,1个代表X,另一个代表Y,大小相同。但您提供的是一个列表列表,其中内部列表的每个数据都包含x,y@SaurabhVerma我不明白你在说什么。这是一个带有解释的答案,并指出代码中需要更正的部分,好吗?我已经提到过,model.fit为X和y使用两个数组,而不是您提供的一个数组。大多数(如果不是所有的话)Keras示例也使用两个数组
[[ 0. 5.]
[ 1. 6.]
[ 2. 7.]
[ 3. 8.]
[ 4. 9.]
[ 5. 10.]
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import Adam
X = np.random.randint(0, 100, 1500)
train_data = np.array([X, X+5])
def build_model():
model = Sequential([
Dense(1, input_shape=(1,), activation='relu', kernel_initializer='ones'),
Dense(1, activation='linear')])
return model
mymodel = build_model()
opt = Adam(lr=0.01, decay=0.009)
mymodel.compile(loss='mean_squared_error', optimizer=opt)
# fit model
history = mymodel.fit(x=train_data[0], y=train_data[1], epochs=50, verbose=1)