spikingjelly的最新版本,我当时使用的是20210330,中间存在onnx的包调用错误,难以解决。
通过调试20201221,发现这个版本的是好使的,但是也有一些是需要调试的。
1.首先应该训练出一个ANN模型出来,此时main函数中应该不填入任何信息,即
if __name__ == '__main__':
main()
# main('./log-cnn_mnist1622169436.7251258')
2.当训练出ANN模型后,会自动生成一个文件夹
如
./log-cnn_mnist1622169436.7251258
这个文件夹中存有大量的ANN和SNN模型
3.
utils.pytorch_ann2snn(model_name=model_name,
norm_tensor=norm_tensor,
test_data_loader=test_data_loader,
device=device,
T=T,
log_dir=log_dir,
config=config
)
这里面有好几个坑:
3.1
原来的代码中,第二个参数写的不是norm_tensor,好像是test_tensor,这个容易发现,按着ctrl 点击pytorch_ann2snn就能很快找到错误。
3.2
utils.py 里面有大量的function
其中有一个pytorch_ann2snn,这个function里面有一行是使用val_ann的
正确代码如下:
ann_acc = val_ann(net=parsed_ann, loss_function=nn.CrossEntropyLoss(),device=device, data_loader=test_data_loader)
原来的代码中,好像是少了一个loss_function的参数
3.3
还是val_ann的问题,但是我忘记了。。。。
反正最后是成功了
控制台输出代码如下:
All the temp files are saved to ./log-cnn_mnist1622169436.7251258
ann2snn config:
{
'simulation': {
'reset_to_zero': False, 'encoder': {
'possion': False}, 'avg_pool': {
'has_neuron': True}, 'max_pool': {
'if_spatial_avg': False, 'if_wta': False, 'momentum': None}}, 'parser': {
'robust_norm': True}}
Directly load model cnn_mnist.pkl
Using 120 pictures as norm set
Load best model for Model:cnn_mnist...
ANN Validating Accuracy:0.986
Save model to: ./log-cnn_mnist1622169436.7251258\parsed_cnn_mnist.pkl
Using robust normalization...
normalize with bias...
Print Parsed ANN model Structure:
Pytorch_Parser(
(network): Sequential(
(0): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1))
(1): ReLU()
(2): AvgPool2d(kernel_size=2, stride=2, padding=0)
(3): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1))
(4): ReLU()
(5): AvgPool2d(kernel_size=2, stride=2, padding=0)
(6): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1))
(7): ReLU()
(8): AvgPool2d(kernel_size=2, stride=2, padding=0)
(9): Flatten(start_dim=1, end_dim=-1)
(10): Linear(in_features=32, out_features=10, bias=True)
(11): ReLU()
)
)
Save model to: ./log-cnn_mnist1622169436.7251258\normalized_cnn_mnist.pkl
Print Simulated SNN model Structure:
PyTorch_Converter(
(network): Sequential(
(0): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1))
(1): IFNode(
v_threshold=1.0, v_reset=None, detach_reset=False
(surrogate_function): Sigmoid(alpha=1.0, spiking=True)
)
(2): AvgPool2d(kernel_size=2, stride=2, padding=0)
(3): IFNode(
v_threshold=1.0, v_reset=None, detach_reset=False
(surrogate_function): Sigmoid(alpha=1.0, spiking=True)
)
(4): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1))
(5): IFNode(
v_threshold=1.0, v_reset=None, detach_reset=False
(surrogate_function): Sigmoid(alpha=1.0, spiking=True)
)
(6): AvgPool2d(kernel_size=2, stride=2, padding=0)
(7): IFNode(
v_threshold=1.0, v_reset=None, detach_reset=False
(surrogate_function): Sigmoid(alpha=1.0, spiking=True)
)
(8): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1))
(9): IFNode(
v_threshold=1.0, v_reset=None, detach_reset=False
(surrogate_function): Sigmoid(alpha=1.0, spiking=True)
)
(10): AvgPool2d(kernel_size=2, stride=2, padding=0)
(11): IFNode(
v_threshold=1.0, v_reset=None, detach_reset=False
(surrogate_function): Sigmoid(alpha=1.0, spiking=True)
)
(12): Flatten(start_dim=1, end_dim=-1)
(13): Linear(in_features=32, out_features=10, bias=True)
(14): IFNode(
v_threshold=1.0, v_reset=None, detach_reset=False
(surrogate_function): Sigmoid(alpha=1.0, spiking=True)
)
)
)
100%|██████████| 100/100 [00:00<00:00, 285.67it/s]
[SNN Simulating... 1.00%] Acc:0.990
100%|██████████| 100/100 [00:00<00:00, 374.17it/s]
[SNN Simulating... 2.00%] Acc:0.995
78%|███████▊ | 78/100 [00:00<00:00, 383.98it/s][SNN Simulating... 3.00%] Acc:0.990
100%|██████████| 100/100 [00:00<00:00, 383.84it/s]
100%|██████████| 100/100 [00:00<00:00, 387.40it/s]
[SNN Simulating... 4.00%] Acc:0.993
100%|██████████| 100/100 [00:00<00:00, 380.71it/s]
[SNN Simulating... 5.00%] Acc:0.992
77%|███████▋ | 77/100 [00:00<00:00, 386.11it/s][SNN Simulating... 6.00%] Acc:0.992
100%|██████████| 100/100 [00:00<00:00, 382.31it/s]
77%|███████▋ | 77/100 [00:00<00:00, 379.92it/s][SNN Simulating... 7.00%] Acc:0.991
100%|██████████| 100/100 [00:00<00:00, 382.12it/s]
100%|██████████| 100/100 [00:00<00:00, 380.98it/s]
[SNN Simulating... 8.00%] Acc:0.990
100%|██████████| 100/100 [00:00<00:00, 383.18it/s]
[SNN Simulating... 9.00%] Acc:0.991
100%|██████████| 100/100 [00:00<00:00, 380.64it/s]
[SNN Simulating... 10.00%] Acc:0.991
78%|███████▊ | 78/100 [00:00<00:00, 382.40it/s][SNN Simulating... 11.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 382.72it/s]
100%|██████████| 100/100 [00:00<00:00, 387.78it/s]
[SNN Simulating... 12.00%] Acc:0.988
77%|███████▋ | 77/100 [00:00<00:00, 380.84it/s][SNN Simulating... 13.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 382.14it/s]
77%|███████▋ | 77/100 [00:00<00:00, 379.64it/s][SNN Simulating... 14.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 380.64it/s]
78%|███████▊ | 78/100 [00:00<00:00, 386.31it/s][SNN Simulating... 15.00%] Acc:0.990
100%|██████████| 100/100 [00:00<00:00, 384.24it/s]
100%|██████████| 100/100 [00:00<00:00, 382.49it/s]
[SNN Simulating... 16.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 383.12it/s]
[SNN Simulating... 17.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 381.43it/s]
[SNN Simulating... 18.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 384.29it/s]
[SNN Simulating... 19.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 383.13it/s]
[SNN Simulating... 20.00%] Acc:0.989
77%|███████▋ | 77/100 [00:00<00:00, 383.32it/s][SNN Simulating... 21.00%] Acc:0.988
100%|██████████| 100/100 [00:00<00:00, 383.44it/s]
100%|██████████| 100/100 [00:00<00:00, 384.28it/s]
[SNN Simulating... 22.00%] Acc:0.988
78%|███████▊ | 78/100 [00:00<00:00, 382.79it/s][SNN Simulating... 23.00%] Acc:0.988
100%|██████████| 100/100 [00:00<00:00, 382.40it/s]
100%|██████████| 100/100 [00:00<00:00, 377.74it/s]
[SNN Simulating... 24.00%] Acc:0.988
78%|███████▊ | 78/100 [00:00<00:00, 382.20it/s][SNN Simulating... 25.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 383.59it/s]
100%|██████████| 100/100 [00:00<00:00, 385.62it/s]
[SNN Simulating... 26.00%] Acc:0.987
78%|███████▊ | 78/100 [00:00<00:00, 383.72it/s][SNN Simulating... 27.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 384.30it/s]
77%|███████▋ | 77/100 [00:00<00:00, 378.39it/s][SNN Simulating... 28.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 383.11it/s]
77%|███████▋ | 77/100 [00:00<00:00, 380.10it/s][SNN Simulating... 29.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 382.31it/s]
78%|███████▊ | 78/100 [00:00<00:00, 385.14it/s][SNN Simulating... 30.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 384.02it/s]
78%|███████▊ | 78/100 [00:00<00:00, 380.23it/s][SNN Simulating... 31.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 381.53it/s]
100%|██████████| 100/100 [00:00<00:00, 384.25it/s]
[SNN Simulating... 32.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 386.27it/s]
[SNN Simulating... 33.00%] Acc:0.986
78%|███████▊ | 78/100 [00:00<00:00, 381.66it/s][SNN Simulating... 34.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 381.08it/s]
78%|███████▊ | 78/100 [00:00<00:00, 386.44it/s][SNN Simulating... 35.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 383.48it/s]
100%|██████████| 100/100 [00:00<00:00, 384.00it/s]
[SNN Simulating... 36.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 385.31it/s]
[SNN Simulating... 37.00%] Acc:0.985
78%|███████▊ | 78/100 [00:00<00:00, 383.32it/s][SNN Simulating... 38.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 382.76it/s]
100%|██████████| 100/100 [00:00<00:00, 382.12it/s]
[SNN Simulating... 39.00%] Acc:0.986
77%|███████▋ | 77/100 [00:00<00:00, 379.25it/s][SNN Simulating... 40.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 380.26it/s]
100%|██████████| 100/100 [00:00<00:00, 381.43it/s]
[SNN Simulating... 41.00%] Acc:0.985
78%|███████▊ | 78/100 [00:00<00:00, 385.23it/s][SNN Simulating... 42.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 385.14it/s]
100%|██████████| 100/100 [00:00<00:00, 382.23it/s]
[SNN Simulating... 43.00%] Acc:0.985
78%|███████▊ | 78/100 [00:00<00:00, 381.57it/s][SNN Simulating... 44.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 381.63it/s]
80%|████████ | 80/100 [00:00<00:00, 382.68it/s][SNN Simulating... 45.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 382.89it/s]
100%|██████████| 100/100 [00:00<00:00, 381.87it/s]
[SNN Simulating... 46.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 382.94it/s]
[SNN Simulating... 47.00%] Acc:0.986
78%|███████▊ | 78/100 [00:00<00:00, 381.88it/s][SNN Simulating... 48.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 381.80it/s]
78%|███████▊ | 78/100 [00:00<00:00, 380.89it/s][SNN Simulating... 49.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 381.39it/s]
100%|██████████| 100/100 [00:00<00:00, 385.67it/s]
[SNN Simulating... 50.00%] Acc:0.987
77%|███████▋ | 77/100 [00:00<00:00, 380.18it/s][SNN Simulating... 51.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 380.93it/s]
78%|███████▊ | 78/100 [00:00<00:00, 384.34it/s][SNN Simulating... 52.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 384.01it/s]
100%|██████████| 100/100 [00:00<00:00, 381.28it/s]
[SNN Simulating... 53.00%] Acc:0.987
78%|███████▊ | 78/100 [00:00<00:00, 382.42it/s][SNN Simulating... 54.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 383.27it/s]
100%|██████████| 100/100 [00:00<00:00, 380.66it/s]
[SNN Simulating... 55.00%] Acc:0.987
77%|███████▋ | 77/100 [00:00<00:00, 383.32it/s][SNN Simulating... 56.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 381.38it/s]
100%|██████████| 100/100 [00:00<00:00, 384.44it/s]
[SNN Simulating... 57.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 380.93it/s]
[SNN Simulating... 58.00%] Acc:0.987
77%|███████▋ | 77/100 [00:00<00:00, 383.83it/s][SNN Simulating... 59.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 382.44it/s]
77%|███████▋ | 77/100 [00:00<00:00, 379.82it/s][SNN Simulating... 60.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 380.56it/s]
77%|███████▋ | 77/100 [00:00<00:00, 381.51it/s][SNN Simulating... 61.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 378.22it/s]
100%|██████████| 100/100 [00:00<00:00, 378.32it/s]
[SNN Simulating... 62.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 381.82it/s]
[SNN Simulating... 63.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 380.16it/s]
[SNN Simulating... 64.00%] Acc:0.986
77%|███████▋ | 77/100 [00:00<00:00, 379.44it/s][SNN Simulating... 65.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 381.32it/s]
100%|██████████| 100/100 [00:00<00:00, 380.55it/s]
[SNN Simulating... 66.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 377.32it/s]
[SNN Simulating... 67.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 380.96it/s]
[SNN Simulating... 68.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 380.04it/s]
[SNN Simulating... 69.00%] Acc:0.985
78%|███████▊ | 78/100 [00:00<00:00, 380.84it/s][SNN Simulating... 70.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 381.85it/s]
100%|██████████| 100/100 [00:00<00:00, 381.54it/s]
[SNN Simulating... 71.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 383.40it/s]
[SNN Simulating... 72.00%] Acc:0.985
78%|███████▊ | 78/100 [00:00<00:00, 382.86it/s][SNN Simulating... 73.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 382.38it/s]
77%|███████▋ | 77/100 [00:00<00:00, 381.36it/s][SNN Simulating... 74.00%] Acc:0.984
100%|██████████| 100/100 [00:00<00:00, 382.45it/s]
77%|███████▋ | 77/100 [00:00<00:00, 380.61it/s][SNN Simulating... 75.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 381.50it/s]
100%|██████████| 100/100 [00:00<00:00, 384.54it/s]
[SNN Simulating... 76.00%] Acc:0.985
76%|███████▌ | 76/100 [00:00<00:00, 375.56it/s][SNN Simulating... 77.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 377.99it/s]
100%|██████████| 100/100 [00:00<00:00, 384.83it/s]
[SNN Simulating... 78.00%] Acc:0.985
72%|███████▏ | 72/100 [00:00<00:00, 346.83it/s][SNN Simulating... 79.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 363.56it/s]
77%|███████▋ | 77/100 [00:00<00:00, 380.04it/s][SNN Simulating... 80.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 380.84it/s]
100%|██████████| 100/100 [00:00<00:00, 382.03it/s]
[SNN Simulating... 81.00%] Acc:0.985
77%|███████▋ | 77/100 [00:00<00:00, 379.45it/s][SNN Simulating... 82.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 380.99it/s]
100%|██████████| 100/100 [00:00<00:00, 381.97it/s]
[SNN Simulating... 83.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 382.07it/s]
[SNN Simulating... 84.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 382.60it/s]
[SNN Simulating... 85.00%] Acc:0.985
83%|████████▎ | 83/100 [00:00<00:00, 380.87it/s][SNN Simulating... 86.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 380.21it/s]
78%|███████▊ | 78/100 [00:00<00:00, 380.85it/s][SNN Simulating... 87.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 378.54it/s]
76%|███████▌ | 76/100 [00:00<00:00, 373.97it/s][SNN Simulating... 88.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 375.22it/s]
100%|██████████| 100/100 [00:00<00:00, 382.67it/s]
[SNN Simulating... 89.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 384.07it/s]
[SNN Simulating... 90.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 385.50it/s]
[SNN Simulating... 91.00%] Acc:0.985
78%|███████▊ | 78/100 [00:00<00:00, 384.77it/s][SNN Simulating... 92.00%] Acc:0.984
100%|██████████| 100/100 [00:00<00:00, 382.92it/s]
77%|███████▋ | 77/100 [00:00<00:00, 381.75it/s][SNN Simulating... 93.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 381.70it/s]
100%|██████████| 100/100 [00:00<00:00, 381.89it/s]
[SNN Simulating... 94.00%] Acc:0.985
78%|███████▊ | 78/100 [00:00<00:00, 382.47it/s][SNN Simulating... 95.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 381.82it/s]
100%|██████████| 100/100 [00:00<00:00, 382.68it/s]
[SNN Simulating... 96.00%] Acc:0.985
78%|███████▊ | 78/100 [00:00<00:00, 383.37it/s][SNN Simulating... 97.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 383.90it/s]
100%|██████████| 100/100 [00:00<00:00, 381.86it/s]
[SNN Simulating... 98.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 378.68it/s]
[SNN Simulating... 99.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 383.33it/s]
[SNN Simulating... 100.00%] Acc:0.985
SNN Simulating Accuracy:0.985
Summary: ANN Accuracy:98.6100% SNN Accuracy:98.5000% [Decreased 0.1100%]
2016-11-08在虚拟化环境下,intel CPU在处理器级别加入了对内存虚拟化的支持。即扩展页表EPT,而AMD也有类似的成为NPT。在此之前,内存虚拟化使用的一个重要技术为影子页表。背景:在虚拟化环境下,虚拟机使用的是客户机虚拟地址GVA,而其本身页表机制只能把客户机的虚拟地址转换成客户机的物理地址也就是完成GVA->GPA的转换,但是GPA并不是被用来真正的访存,所以需要想办法把客...
1. 如果是在Console界面下有报错,那么可以尝试解决问题,而且可以取消ErrorPause的高亮2. 如果没报错,说明应该不是ErrorPause的原因,可以搜索代码,看看里面有没有Time.timeScale=0的语句,或者Debug.Break()这样的语句,这些语句都可能造成运行时暂停的情况。...
介绍FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。iText是一种生成PDF报表的Java组件。通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样就...
初学UWB,一起讨论一起学习
在某些网站接口时,用postman测试好的数据,但离开了postman,却不行(这以小米商城移动端为例,其它网站类似情况一样)? 在这种情况下,要注意了!这时你会好奇,我甚至明明复制的就是,postman提供的请求代码块, 然而,在html网页获取数据时,仍然获取不到数据:原因就是,你`跨域`了;这时,你刚解决跨 域后,浏览器可能不会给你抛出错误,虽然浏览器给你一个200的状态码,但是,你会发现,data 里面还是没有获取到数据,哎呀!这是为什么呢?答案就是:你没有设置代理服务器!!! 乍一听
在robbin的那个贴下回了一下,问我要电子书的tx陆续有几个了,本来想通过邮件发的,但是无奈太大,一一发邮件太费神了,所以想了一下,还是我放在博客上,有需要的就下载吧。 根据robbin的那个推荐,我將分期將我所持有的电子书资源上传,如果觉得好,大家还是买实体书吧,支持下版权,谢谢。 《敏捷建模》ScottAmbler的名著,这本书非常的progmatic,告诉你
KerasBatchNormalization(Keras批量归一化层)[源码]从Keras导入一个BatchNormalization层。KerasBatchNormalizationpublic KerasBatchNormalization(Integer kerasVersion) throws UnsupportedKerasConfigurationExcept...
父类继承于UIScrollView,所以它具有UIScrollView的属性和方法。继承于UIScrollView的相关属性和方法以下不再赘述请参见:iOS控件之UIScrollView创建UITextView * textView = [[UITextView alloc] init];UITextView * textView = [[UITextView all...
写在前面: 又是一个阴雨的周末,也不知道是不是在江南待的太久的缘故,每逢阴雨的周末,兴奋的连懒觉都睡不了。看着窗外的细雨,回想起这一路走来的点点滴滴,些许感慨!光阴似箭,岁月蹉跎,未来的路在何方,明年今日自己会在哪里,做着什么样的事情呢?
为什么80%的码农都做不了架构师?>>> ...
PX4 SITL Gazebo 仿真时 libgazebo_multirotor_base_plugin 插件运行时出错问题描述原因分析解决办法总结问题描述在 Gazebo 中进行 PX4 的软件在环仿真时,执 make px4_sitl gazebo命令时,整个编译过程都没问题,但是编译完成后,在启动 gazebo 时出现黑屏,报错如下:gzserver: symbol lookup error: ~/Firmware/build/px4_sitl_default/build_gazebo/libg
前言前面的功能模块写完了,项目也能跑起来了,但是功能到底有没有用,有没有bug,数据能不能保存到数据库中等都需要我们去验证,总不能写了就不管了,能跑就行,然后扔给前端,这样会挨骂的哈哈,我们要确保自己写的代码能调试通,才能交付给前端开发。我们大多数开发都是使用的Postman进行测试接口的,非常的方便,接下来我们就一起学习Postman,加油猿人!一、Postman介绍1、什么是Postman?Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的