list index out of range

qq_40009842 2018-12-05 10:13:18
        for loop in range(40):

# 生成并打乱训练集的顺序。
#indices = np.arange(50000)
indices = np.arange(314)
random.shuffle(indices)

# batch size此处定义为200。
# 训练集一共50000张图片,前40000张用于训练,后10000张用于验证集。
#for i in range(0, 0+4000, 200):
for i in range(0, 0 + 300, 15):
photo = []
label = []
#for j in range(0, 200):
for j in range(0, 15):
# print(keys[indices[i + j]])
photo.append(cv2.resize(cv2.imread(keys[indices[i + j]]), (224, 224))/225)
label.append(files[keys[indices[i + j]]])
m = getOneHotLabel(label, depth=3)
a, b = sess.run([optimizer, loss], feed_dict={myinput: photo, mylabel: m})
print("\r%lf"%b, end='')

acc = 0
# 每次取验证集的200张图片进行验证,返回这200张图片的正确率。
#for i in range(40000, 40000+10000, 200):
for i in range(300, 300 + 14, 2):
photo = []
label = []
for j in range(i, i + 2):
photo.append(cv2.resize(cv2.imread(keys[indices[j]]), (224, 224))/225)
label.append(files[keys[indices[j]]])
m = getOneHotLabel(label, depth=3)
acc += sess.run(valaccuracy, feed_dict={myinput: photo, mylabel: m})
# 输出,一共有50次验证集数据相加,所以需要除以50。
#print("Epoch ", loop, ': validation rate: ', acc/50)
print("Epoch ", loop, ': validation rate: ', acc / 7)
# 保存模型。
saver.save(sess, "AlexNet/AlexNet.ckpt")



运行报错:IndexError: list index out of range
这个该如何解决呢? 该代码转自:https://blog.csdn.net/DaVinciL/article/details/78888605
期望各位的指导。
感谢。
...全文
375 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_40009842 2018-12-06
  • 打赏
  • 举报
回复
新手小白一个,如有错误,还请指导
qq_40009842 2018-12-06
  • 打赏
  • 举报
回复
引用 2 楼 百年da孤独 的回复:
代码都不搞完整,别人怎么给你调试?


def alexnet_main():
# 加载使用的训练集文件名和标签。
files = np.load("label.npy", encoding='bytes')[()]

# 提取文件名。
keys = [i for i in files]

print(len(keys))

myinput = tf.placeholder(dtype=tf.float32, shape=[None, 224, 224, 1], name='input')
mylabel = tf.placeholder(dtype=tf.float32, shape=[None, 3], name='label')

# 建立网络,keepprob为0.6。
myoutput = alexnet(myinput, 0.6)

# 定义训练的loss函数。
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=myoutput, labels=mylabel))

# 定义优化器,学习率设置为0.09,学习率可以设置为其他的数值。
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.09).minimize(loss)

# 定义准确率
valaccuracy = tf.reduce_mean(
tf.cast(
tf.equal(
tf.argmax(myoutput, 1),
tf.argmax(mylabel, 1)),
tf.float32))

# tensorflow的saver,可以用于保存模型。
saver = tf.train.Saver()
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
# 40个epoch
for loop in range(40):

# 生成并打乱训练集的顺序。
#indices = np.arange(50000)
indices = np.arange(314)
random.shuffle(indices)

# batch size此处定义为200。
# 训练集一共50000张图片,前40000张用于训练,后10000张用于验证集。
#for i in range(0, 0+40000, 200):
for i in range(0, 0 + 300, 10):
photo = []
label = []
#for j in range(0, 200):
for j in range(0, 10):
#print(keys[indices[i + j]])
#print(indices[i + j])
#l = len(keys)
#print("%d\n" % l)
photo.append(cv2.resize(cv2.imread(keys[indices[i + j]]), (224, 224))/225)
label.append(files[keys[indices[i + j]]])
m = getOneHotLabel(label, depth=3)
a, b = sess.run([optimizer, loss], feed_dict={myinput: photo, mylabel: m})
print("\r%lf"%b, end='')

acc = 0

# 每次取验证集的200张图片进行验证,返回这200张图片的正确率。
#for i in range(40000, 40000+10000, 200):
for i in range(300, 300 + 14, 2):
photo = []
label = []
for j in range(i, i + 2):
photo.append(cv2.resize(cv2.imread(keys[indices[j]]), (224, 224))/225)
label.append(files[keys[indices[j]]])
m = getOneHotLabel(label, depth=3)
acc += sess.run(valaccuracy, feed_dict={myinput: photo, mylabel: m})
# 输出,一共有50次验证集数据相加,所以需要除以50。
#print("Epoch ", loop, ': validation rate: ', acc/50)
print("Epoch ", loop, ': validation rate: ', acc / 7)
# 保存模型。
saver.save(sess, "AlexNet/AlexNet.ckpt")

if __name__ == '__main__':
alexnet_main()



我个人觉得是keys的问题,print 出来keys是3,而我的数据是314,所以超界了。以下代码是key所指文件转换

import numpy as np
import os


train_label = {}

for i in range(3):
search_path = 'F:/2/data/train'.format(i)
file_list = os.listdir(search_path)
for file in file_list:
train_label[os.path.join(search_path, file)] = i

np.save('label.npy', train_label)

test_label = {}

for i in range(3):
search_path = 'F:/2/data/test'.format(i)
file_list = os.listdir(search_path)
for file in file_list:
test_label[os.path.join(search_path, file)] = i

np.save('test-label.npy', test_label)



无论我怎么修改,key都是3, 很奇怪,不知道哪里出错了。
qq_40009842 2018-12-06
  • 打赏
  • 举报
回复
啊,还有,忘了说我的label是三
百年da孤独 2018-12-05
  • 打赏
  • 举报
回复
代码都不搞完整,别人怎么给你调试?
qq_40009842 2018-12-05
  • 打赏
  • 举报
回复
photo.append(cv2.resize(cv2.imread(keys[indices[i + j]]), (224, 224))/225)
label.append(files[keys[indices[i + j]]])


这两行都报错

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧