建立均方误差函数时,运行代码时报错: TypeError: unsupported operand type(s) for -: 'list' and 'list'
import numpy as np
def mean_squared(y, t):
"""
:param y:神经网络输出y
:param t: 监督数据
:return: 均方误差
"""
return 0.5*np.sum((y-t)**2)
t = [0,0,1,0,0,0,0,0]
y = [0.1,0.05,0.1,0.0,0.05,0.1,0.0,0.6]
mean_square = mean_squared(y,t)
print(mean_square)
代码输出:
Traceback (most recent call last):
File "D:\pycharm\pythonProject2\deep-learing\均方误差.py", line 12, in <module>
mean_square = mean_squared(y,t)
File "D:\pycharm\pythonProject2\deep-learing\均方误差.py", line 8, in mean_squared
return 0.5*np.sum((y-t)**2)
TypeError: unsupported operand type(s) for -: 'list' and 'list'
出错原因: 列表支持加法运算(合并列表),但是不支持减法运算,如下代码所示:
# 列表执行加法操作
a = [11,22,33]
b = [1,2,3]
print(a+b)
代码运行正常:
[11, 22, 33, 1, 2, 3]
# 列表执行减法操作
a = [11,22,33]
b = [1,2,3]
print(a-b)
代码运行报错:
TypeError: unsupported operand type(s) for -: 'list' and 'list'
正确解决方式:使用numpy
import numpy as np
a=np.array([11,22,33])
print(a)
b=np.array([1,2,3])
print(b)
print(a-b)
代码运行正常:
[11 22 33]
[1 2 3]
[10 20 30]
因此解决均方误差函数的方法时:使用numpy
t = np.array([0,1,0,0,0,0])
y = np.array([0.05,0.1,0.05,0.1,0.0,0.6])
或者:
m = mean_squared_error(np.array(y),np.array(t))
所以,正确的完整代码时:
import numpy as np
def mean_squared(y, t):
"""
:param y:神经网络输出y
:param t: 监督数据
:return: 均方误差
return 0.5*np.sum((y-t)**2)
t = np.array([0,0,1,0,0,0,0,0])
y = np.array([0.1,0.05,0.1,0.0,0.05,0.1,0.0,0.6])
mean_square = mean_squared(y,t)
# mean_square = mean_squared(np.array(y),np.array(t))
print(mean_square)
0.5975