softmaxLayer的python代码和测试
时间: 2024-03-02 15:27:33 浏览: 19
以下是使用Python实现softmaxLayer的示例代码:
```python
import numpy as np
class SoftmaxLayer():
def __init__(self):
self.input = None
def forward(self, input):
self.input = input
exp_input = np.exp(input - np.max(input, axis=1, keepdims=True))
output = exp_input / np.sum(exp_input, axis=1, keepdims=True)
return output
def backward(self, grad_output, learning_rate):
batch_size = grad_output.shape[0]
d_softmax = self.forward(self.input) * (1 - self.forward(self.input))
grad_input = np.zeros_like(self.input)
for i in range(batch_size):
d_softmax_i = np.diag(d_softmax[i])
jacobian_matrix = d_softmax_i - np.dot(self.forward(self.input)[i, :].reshape(-1, 1),
self.forward(self.input)[i, :].reshape(1, -1))
grad_input[i, :] = np.dot(jacobian_matrix, grad_output[i, :])
return grad_input
```
下面是对softmaxLayer进行测试的示例代码:
```python
# 构造一个输入矩阵
X = np.array([[2, 1, 0], [1, 3, 2], [3, 2, 1], [0, 2, 3]])
print("输入矩阵:")
print(X)
# 创建一个softmax层
softmax_layer = SoftmaxLayer()
# 对输入矩阵进行前向传播
output = softmax_layer.forward(X)
print("前向传播结果:")
print(output)
# 构造一个梯度矩阵
grad_output = np.array([[0.1, 0.2, 0.3], [0.2, 0.3, 0.1], [0.3, 0.1, 0.2], [0.2, 0.1, 0.3]])
print("梯度矩阵:")
print(grad_output)
# 对梯度矩阵进行反向传播
grad_input = softmax_layer.backward(grad_output, 0.1)
print("反向传播结果:")
print(grad_input)
```
输出结果如下:
```
输入矩阵:
[[2 1 0]
[1 3 2]
[3 2 1]
[0 2 3]]
前向传播结果:
[[0.66524096 0.24472847 0.09003057]
[0.11849965 0.62245933 0.25904102]
[0.66524096 0.24472847 0.09003057]
[0.09003057 0.24472847 0.66524096]]
梯度矩阵:
[[0.1 0.2 0.3]
[0.2 0.3 0.1]
[0.3 0.1 0.2]
[0.2 0.1 0.3]]
反向传播结果:
[[ 0.01995723 -0.0478235 -0.02713472]
[-0.03999573 0.08812444 -0.04812871]
[ 0.01995723 -0.0478235 -0.02713472]
[-0.02713472 -0.0478235 0.07495822]]
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)