jarvis_caffe

重点内容#验证 CUDA 8.0 是否安装成功
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery

sudo make

./deviceQuery

验证 cudnn 是否安装成功

nvcc -V

安装caffe后,python:import pycaffe 显示no module name caffe

原因:要将cafe/python路进写进bashrc里面 
    export PYTHONPATH=/home/nvidia/Pingan/caffe/python
    或:  export PYTHONPATH="/home/nvidia/Pingan/caffe/python:$PYTHONPATH"

在mnist数据转换时 Check failed: image_file Unable to open file data/mnist/train-images-idx3-ubyte

原因:下载下来的是train-images.idx3-ubyte,要把.改成-

为什么caffe要将数据转换为lmdb/leveldb格式

原因:数据类型多样,转换为统一格式可以简化数据读取层的实现
      可以提高磁盘IO利用率

gedit返回操作:

ctrl+z

caffe中应用google开源的GLOG日志(就是训练时终端的输出格式)

日期 时间 进程号 源码文件:代码行号 输出信息
举个例子: I0809 07:22:35.745297 16960 layer_factory.hpp:77] Creating layer mnist
     I0809 07:22:35.745728 16960 db_lmdb.cpp:35] Opened lmdb examples/mnist/mnist_train_lmdb
             I0809 07:22:35.745824 16960 net.cpp:84] Creating Layer mnist
             I0809 07:22:35.745867 16960 net.cpp:380] mnist -> data

全局追踪某个句子

grep -n -H -R  (-n 显示行号  -H 显示文件名 -R递归查找每个子目录 )

C++什么时候用->或者点(.)

所以,如果目标是一个对象,那就用点,如果是一个指针,那就用箭头...

c++虚函数(https://www.cnblogs.com/jin521/p/5602190.html)

实现动态多态则必须使用虚函数--用virtual去修饰成员函数使其成为虚函数(构造函数不需要加virtual)

类模板(https://www.cnblogs.com/cxq0017/p/6076856.html)

如果一个类中的数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表一类类。template<typename T>.在模板定义语法中关键字class与typename的作用完全一样

虚基类(https://blog.csdn.net/qq_32175379/article/details/53790307)

解决多重多级继承造成的二义性问题。例如有基类B,从B派生出C和D,然后类F又同时继承了C和D,现在类F的一个对象里面包含了两个基类B的对象,如果F访问自己的从基类B那里继承过来的的数据成员或者函数成员那么编译器就不知道你指的到底是从C那里继承过来的B对象呢还是从D那里继承过来的B对象。class B:virtual public A   //此处采用虚继承

explicit(https://www.cnblogs.com/ymy124/p/3632634.html)

C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).只对有一个参数的类构造函数有效,也有一个例外, 就是当除了第一个参数以外的其他参数都有默认值的时候, explicit关键字依然有效, CxString(int size)  CxString(const char *p),当C++中, 如果的构造函数只有一个参数时, 可以
                      CxString string2 = 10;这样是OK的, 为CxString预分配10字节的大小的内存  
                      CxString string5 = "c"; 这样也是OK的, 其实调用的是CxString(int size), 且size等于'c'的ascii码                                            CxString string5 = "bbb"; // 这样也是OK的, 调用的是CxString(const char *p) 
                      这个时候有点矛盾,要把 CxString string5 = "c"屏蔽掉,不能让它有这个默认用法,就加个implicit

caffe与tensorflow的区别:

    Tensor的出发点是建立在符号系统上的,而Caffe(2013)只是最暴力的执行代码。正向传播输出,还是反向传播残差
    Caffe(2013)属于Imperative Programme(命令程序) 白盒,需要自己设计fp和bp算法,
    Theano(2012)、TensorFlow(2015)、MXNet(2015)属于Declaretive Programme(声明程序) 黑盒,只需要输入data fp和bp自动计算

caffe训练 caffe.bin train –solver **_solver.prototxt

    里可以设置snapshot,这样就会每n次迭代生成一个cifar10_full_iter_60000.solverstate,快照,然后从这里开始从新训练的话,可以
    $TOOLS/caffe train \
        --solver=examples/cifar10/cifar10_full_solver_lr1.prototxt \    //这里可以从新写一个solver.prototxt,主要是改变其lr_rata,snapshot,等
        --snapshot=examples/cifar10/cifar10_full_iter_60000.solverstate 

caffe测试 caffe.bin test –model lenet_train_test.prototxt

                    --weight lenet_iter_1000.caffemodel  

lr_policy可以设置为下面这些值,相应的学习率的计算为:

    - fixed:   保持base_lr不变.
    - step:    如果设置为step,则还需要设置一个stepsize,  返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示当前的迭代次数
    - exp:     返回base_lr * gamma ^ iter, iter为当前迭代次数
    - inv:      如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power)
    - multistep: 如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multistep则是根据                                 stepvalue值变化
    - poly:     学习率进行多项式误差, 返回 base_lr (1 - iter/max_iter) ^ (power)
    - sigmoid: 学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))

Protocol Buffers是什么(https://blog.csdn.net/langb2014/article/details/50151831

Protocol Buffers提供了一种灵活,高效,自动序列化结构数据的机制,可以联想XML,但是比XML更小,更快,更简单。仅需要自定义一次你所需的数据格式, 然后用户就可以使用Protocol Buffers自动生成的特定的源码,方便的读写用户自定义的格式化的数据。不限语言,不限平台。还可以在不破坏原数据格式的基础上,依据老的数据格式, 更新现有的数据格式。

required:必须赋值,不能为空
optional:字段可以赋值,也可以不赋值。假如没有赋值的话,会被赋上默认值
repeated:该字段可以重复任意次数,包括0次,将这个字段想象成一个可以自动设置size的数组就可以了。

用PB 编译器运行.proto文件后,会按照定义的格式,生成指定语言的一系列代码,这些的功能包括:字段值的getter,setter,序列化message并写入到输出流,从输入流接写成message等
对于Java,编译器生成一个.java文件,该java文件内包含几个内部类,分别对应.proto文件中定义的message 类型,以及将来用于创建message类实例的Builder类。就像数据结构,已经给你添加了一些方法,set get等等

caffe FLAGS (https://blog.csdn.net/langb2014/article/details/50458014)

caffe :command : command:

train
test
device_query
time

:

-solver -solver examples/mnist/lenet_solver.prototxt
-gpu -gpu 0,1
-snapshot -snapshot examples/mnist/lenet_iter_5000.solverstate 快照,从断点续传
-weights -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel 训练好的模型
-iteration -iterations 100
-model -model examples/mnist/lenet_train_test.prototxt
-sighup_effect -sighup_effect:可选参数。用来设定当程序发生挂起事件时,执行的操作,可以设置为snapshot, stop或none, 默认为snapshot
-sigint_effect -sigint_effect: 可选参数。用来设定当程序发生键盘中止事件时(ctrl+c), 执行的操作,可以设置为snapshot, stop或none, 默认为stop

测试自己的数据(https://blog.csdn.net/langb2014/article/details/50458520)
1:找数据集,比如500张图片,5类,训练400,测试100
2:制作train.txt和test.txt–create_filelist.sh 将图片转换成lmdb或者leveldn格式–create_lmdb.sh
3:可以制作mean.binaryproto将图片均值化,方便训练(此处的train和test的均值化文件一样?)
4:找到solver.prototxt和train_val.prototxt 分别是net和solver
5:caffe.bin train –solver solver.prototxt
6:输出.caffemodel和.solverstate

ubuntu查看opencv版本

pkg-config --modversion opencv
引用是一段关于利用pwntools库对jarvisoj_level0进行攻击的代码。代码中使用了remote()方法建立了远程连接,并构造了一个payload来利用栈溢出漏洞,最终执行callsystem()函数来获取shell权限。引用也是类似的代码,只是连接的地址不同。引用是一篇关于pwntools基本用法的文章,并提供了一些常用的函数和方法。根据这些引用内容,可以得出结论,jarvisoj_level0是一个存在栈溢出漏洞的程序,可以通过构造特定的payload来执行系统调用函数,从而获取shell权限。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [jarvisoj_level0](https://blog.csdn.net/weixin_56301399/article/details/125919313)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [jarvisOJ-level0](https://blog.csdn.net/qq_35661990/article/details/82889103)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [jarvis oj---level0解题方法](https://blog.csdn.net/weixin_45427676/article/details/97272924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值