问题
最近跟着pytorch中文文档学习遇到一些小问题,已经解决,在此对这些错误进行记录:
- 在读取数据集时报错:
AttributeError: 'Series' object has no attribute 'as_matrix'
- 在显示图片是时报错:
ValueError: Masked arrays must be 1-D
-
显示单张图片时
figure
一闪而过 -
在显示多张散点图的时候报错:
TypeError: show_landmarks() got an unexpected keyword argument 'image'
解决方案
- 主要问题在这一行: 最终目的是将Series转为Matrix,即调用np.mat即可完成。
- 修改前:
landmarks =landmarks_frame.iloc[n, 1:].as_matrix()
- 修改后:
landmarks =np.mat(landmarks_frame.iloc[n, 1:])
- 打散点的x和y坐标应该均为向量或列表,故将
landmarks
后使用tolist()
方法即可
- 修改前:
plt.scatter(landmarks[:,0],landmarks[:,1],s=10,marker='.',c='r')
- 修改后
plt.scatter(landmarks[:,0].tolist(),landmarks[:,1].tolist(),s=10,marker='.',c='r')
- 前面使用
plt.ion()
打开交互模式,则后面在plt.show()
之前一定要加上plt.ioff()
。这里直接加到函数里面,避免每次plt.show()
之前都用plt.ioff()
- 修改前
def show_landmarks(imgs,landmarks):
'''显示带有地标的图片'''
plt.imshow(imgs)
plt.scatter(landmarks[:,0].tolist(),landmarks[:,1].tolist(),s=10,marker='.',c='r')#打上红色散点
plt.pause(1)#绘图窗口延时
- 修改后
def show_landmarks(imgs,landmarks):
'''显示带有地标的图片'''
plt.imshow(imgs)
plt.scatter(landmarks[:,0].tolist(),landmarks[:,1].tolist(),s=10,marker='.',c='r')#打上红色散点
plt.pause(1)#绘图窗口延时
plt.ioff()
- 网上说对于字典类型的
sample
可通过**sample
的方式获取每个键下的值,但是会报错,于是把输入写的详细一点,就成功了。
- 修改前
show_landmarks(**sample)
- 修改后
show_landmarks(sample['image'],sample['landmarks'])