我们在python脚本上运行spark-submit命令,该脚本使用Spark在Python中使用Caffe并行化对象检测.如果在仅使用Python的脚本中运行,脚本本身运行完全正常,但在将其与Spark代码一起使用时会返回导入错误.我知道火花代码不是问题,因为它在我的家用机器上运行得非常好,但它在AWS上运行不正常.我不确定这是否与环境变量有关,就好像它没有检测到它们一样.
设置这些环境变量:
SPARK_HOME=/opt/spark/spark-2.0.0-bin-hadoop2.7
PATH=$SPARK_HOME/bin:$PATH
PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
PYTHONPATH=/opt/caffe/python:${PYTHONPATH}
Run Code Online (Sandbox Code Playgroud)
错误:
16/10/03 01:36:21 WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, 172.31.50.167): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/worker.py", line 161, in main
func, profiler, deserializer, serializer = read_command(pickleSer, infile)
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/worker.py", line 54, in read_command
command = serializer._read_with_length(file)
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/serializers.py", line 164, in _read_with_length
return self.loads(obj)
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/serializers.py", line 422, in loads
return pickle.loads(obj)
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/cloudpickle.py", line 664, in subimport
__import__(name)
ImportError: ('No module named caffe', <function subimport at 0x7efc34a68b90>, …Run Code Online (Sandbox Code Playgroud) 是否有一种简单的方法(例如,不修改caffe代码)将多个预训练网络的重量加载到一个网络中?该网络包含一些与预训练网络具有相同尺寸和名称的图层.
我试图用NVidia DIGITS和Caffe实现这一目标.
编辑:我认为不可能直接从DIGITS这样做,正如答案所证实的那样.任何人都可以建议一种简单的方法来修改DIGITS代码,以便能够选择多个预训练网络吗?我检查了一下代码,并认为训练脚本是一个很好的起点,但我对Caffe没有深入的了解,所以我不确定实现这个目标的最佳/最快方法是什么.
deep-learning caffe conv-neural-network pycaffe nvidia-digits
我试图了解caffe的基础知识,特别是与python一起使用.
我的理解是模型定义(比如给定的神经网络架构)必须包含在'.prototxt'文件中.
当您使用数据训练模型时'.prototxt',将权重/模型参数保存到'.caffemodel'文件中
此外,'.prototxt'用于培训的文件(包括学习速率和正则化参数)与用于测试/部署的文件(不包括它们)之间存在差异.
问题:
'.prototxt'训练的基础并且'.caffemodel'是训练(重量)的结果
是正确的'.prototxt'吗?'.prototxt'训练和一个用于测试,并且只有轻微的差异(学习率和训练的正规化因素),但nn架构(假设你使用神经网络)是相同的?为这些基本问题道歉,可能还有一些非常不正确的假设,我正在做一些在线研究,上面的几行总结了我迄今为止的理解.
我想用caffe.drawmac在anaconda python上绘制caffe网.但是我得到了这样的错误:
File "python/draw_net.py", line 45, in <module>
main()
File "python/draw_net.py", line 41, in main
caffe.draw.draw_net_to_file(net, args.output_image_file, args.rankdir)
File "/Users/xxh/caffe/distribute/python/caffe/draw.py", line 222, in draw_net_to_file
fid.write(draw_net(caffe_net, rankdir, ext))
File "/Users/xxh/caffe/distribute/python/caffe/draw.py", line 204, in draw_net
return get_pydot_graph(caffe_net, rankdir).create(format=ext)
File "/Users/xxh/anaconda2/lib/python2.7/site-packages/pydot.py", line 1883, in create
prog=prog))
Exception: "dot" not found in path.
Run Code Online (Sandbox Code Playgroud)
我已经安装了pydot和graphviz,我怎样才能将dot的路径添加到python路径?
我正在finetuning使用a Caffe上的图像数据集Tesla K40.使用batch size=47,solver_type=SGD,base_lr=0.001,lr_policy="step",momentum=0.9,gamma=0.1,的training loss下降,test accuracy从去2%-50%在100迭代这是相当不错的.
当使用其他优化器,例如RMSPROP,ADAM和ADADELTA,余数training loss几乎相同,并且test accuracy在1000迭代后没有任何改进.
因为RMSPROP,我已经改变了这里提到的各个参数.
因为ADAM,我已经改变了这里提到的各个参数
因为ADADELTA,我已经改变了这里提到的各个参数
有人可以告诉我我做错了什么吗?
machine-learning computer-vision deep-learning caffe pycaffe
我有大约100万张图像放在这个数据集10000中,一次附加到集合中.
我确定map_size与本文的参考文献有关
使用此行创建集合
env = lmdb.open(Path+'mylmdb', map_size=int(1e12)
Run Code Online (Sandbox Code Playgroud)
每10000个样本使用此行将数据写入文件,其中X和Y是要放入LMDB的数据的占位符.
env = create(env, X[:counter,:,:,:],Y,counter)
def create(env, X,Y,N):
with env.begin(write=True) as txn:
# txn is a Transaction object
for i in range(N):
datum = caffe.proto.caffe_pb2.Datum()
datum.channels = X.shape[1]
datum.height = X.shape[2]
datum.width = X.shape[3]
datum.data = X[i].tostring() # or .tostring() if numpy < 1.9
datum.label = int(Y[i])
str_id = '{:08}'.format(i)
# The encode is only essential in Python 3
txn.put(str_id.encode('ascii'), datum.SerializeToString())
#pdb.set_trace()
return env
Run Code Online (Sandbox Code Playgroud)
如何编辑此代码,以便将新数据添加到此LMDB而不替换,因为此方法将其替换为相同位置.我用env.stat()检查了生成后的长度.
我想要的是,在加载网后,我将分解某些图层并保存新网.例如
原始网:
data - > conv1 - > conv2 - > fc1 - > fc2 - > softmax;
新网:
data - > conv1_1 - > conv1_2 - > conv2_1 - > conv2_2 - > fc1 - > fc2 - > softmax
因此,在此过程中,我陷入了以下情况:
1.如何使用指定的图层参数新建某个图层pycaffe?
2.如何层参数从现有层(诸如复制fc1和fc2以上)?
我知道通过使用caffe::net_spec,我们可以手动定义一个新的网络.但是caffe::net_spec无法从现有层指定层(例如:) fc1.
是否有一种相对简单的方法可以从没有 CAFFE(也没有 pyCaffe)的Caffe Zoo 中的众多预训练模型之一中提取 Python 中的权重?即解析.caffemodel为 hdf5/numpy 或 Python 可以读取的任何格式?
我找到的所有答案都使用带有 caffe 类或 Pycaffe 的 C++ 代码。我看过pycaffe的代码,看起来你真的需要caffe来理解二进制文件是唯一的解决方案吗?
prototxt在caffe中定义时,我发现有时我们使用Softmax最后一层的类型,有时我们使用SoftmaxWithLoss,我知道Softmax图层将返回输入数据属于每个类的概率,但似乎SoftmaxwithLoss也会返回类概率,那么是什么他们之间的区别?还是我误解了两种图层类型的用法?
我想修改ImageNet caffe模型,如下所述:
由于时间网络的输入通道编号与空间网络的输入通道编号不同(20对3),我们对通道中第一层的ImageNet模型滤波器求平均值,然后将平均结果复制20次作为时间网络的初始化.
我的问题是如何才能实现上述结果?如何打开caffe模型才能对其进行更改?
我阅读了网络手术教程,但它没有涵盖所需的程序.
谢谢您的帮助!
AMayer