在caffe中,该convolution
图层采用一个底部blob,并将其与学习过滤器(使用权重类型初始化 - "Xavier","MSRA"等)进行卷积.但是,我的问题是我们是否可以简单地卷入两个底部blob并产生一个顶部blob.这样做最优雅的方式是什么?这样做的目的是:其中一个底部blob将是data
另一个将是一个动态过滤器(根据data
前所未有的变化)(我正在尝试实现动态卷积).
我的尝试:
我想到的一种方法是修改filler.hpp
并将底部blob指定为filler
矩阵本身(而不是"Xavier","MSRA"等).然后我认为卷积层会从那里拾取.我们可以设置lr = 0
为表示不应更改由我们的自定义填充程序初始化的权重.但是,在我查看源代码后,我仍然不知道该怎么做.另一方面,我不想打破caffe的工作流程.如果我想要它们,我仍然希望转换层正常运行.
显然,一个比较繁琐的方法是使用的组合Slice
,tile
和/或Scale
层字面上实施卷积.我认为它会起作用,但结果会很混乱.还有其他想法吗?
编辑1:
我通过修改caffe的卷积层写了一个新图层.特别地src/caffe/layers/conv_layer.cpp
,在第27行,它采用由其定义的权重filler
并将其与底部blob卷积.因此filler
,我修改了图层,使其现在需要两个底部,而不是从中填充该blob .其中一个底部直接分配给填充符.现在我不得不做一些其他改动,例如:
weight
blob对于所有样本具有相同的值.对于不同的样本,它将具有不同的值.所以我改变了第32行:this->forward_cpu_gemm(
bottom_data + n * this->bottom_dim_,
weight,
top_data + n * this->top_dim_);
Run Code Online (Sandbox Code Playgroud)
至:
this->forward_cpu_gemm(
bottom_data + n * bottom[1]->count(1),
bottom[0]->cpu_data() + n * bottom[0]->count(1),
top_data + n * this->top_dim_);
Run Code Online (Sandbox Code Playgroud)
为了方便起见,我假设没有涉及偏见项,步幅总是1,填充总是0,组总是1等等.但是,当我测试前向传球时,它给了我一些奇怪的答案(带一个简单的卷积内核= np.ones((1,1,3,3))
.这个内核的学习率设置为零,这样它就不会改变.但是,我无法得到正确答案.任何建议都将受到赞赏.
请不要使用现有的层来提出解决方案Slice, Eltwise, Crop
.我已经实现了 - 它的工作原理 - 但它复杂且内存效率低得令人难以置信.
我有两个两个边界框的坐标,其中一个是基础,另一个是我工作的结果.我想评估一下我的准确性.所以我问是否有人有任何建议
边界框详细信息以此格式保存 [x,y,width,height]
我在将openCV添加到我的eclipse项目的buildpath时遇到了问题.我已按照本网站教程中的说明操作:http://docs.opencv.org/2.4.4-beta/doc/tutorials/introduction/desktop_java/java_dev_intro.html#create-a-simple-java-project-在月食
但是执行代码片段会给出这个控制台输出:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv-java2.4.4 in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at camStatisticsTests.RawTests.main(RawTests.java:20)
Run Code Online (Sandbox Code Playgroud)
为了让openCV与java和eclipse一起工作,我该怎么办?我想将它用作普通的java库.
考虑2个矢量A = [20000000 x 1]
和B = [20000000 x 1 ]
我需要找到对应于B的每个独特元素的所有A的总和.
虽然这看起来很简单,但这在MATLAB中将永远存在.
目前,我正在使用
u = unique(B);
length_u = length(u);
C = zeros(length_u,1);
for i = 1:length_u
C(i,1) = sum(A(B==u(i)));
end
Run Code Online (Sandbox Code Playgroud)
反正有没有让它跑得更快?我尝试parfor
使用并行计算工具箱拆分循环并运行2个循环(因为我只有2个核心).还需要几个小时.
PS:是的,我应该买一台更好的电脑.
我的问题如下:
我有一个大数据details
框,称为包含900K行,另一个包含80M行,称为attributes
。
两者都有一列A
,我想在该列上进行左外连接,左数据框为deatils
。
A
数据框中的列中只有75,000个唯一条目details
。列中的数据框attributes
80M唯一条目A
。
什么是实现join
手术的最佳方法?
我尝试了什么?
简单的连接即details.join(attributes, "A", how="left_outer")
超时(或释放内存)。
由于in列A
中只有75,000个唯一条目details
,因此我们不在乎in数据框中的其余条目attributes
。因此,首先我使用以下方法进行过滤:
uniqueA = details.select('A').distinct().collect()
uniqueA = map(lambda x: x.A, uniqueA)
attributes_filtered = attributes.filter(attributes.A.isin(*uniqueA))
Run Code Online (Sandbox Code Playgroud)
我认为这可以解决,因为该attributes
表从8000万行减少到仅仅75000行。但是,仍然需要永远完成join
(并且永远不会完成)。
接下来,我认为分区太多,要连接的数据不在同一分区上。虽然,我不知道如何将所有数据带到同一分区,但我认为重新分区可能会有所帮助。所以就到这里。
details_repartitioned = details.repartition("A")
attributes_repartitioned = attributes.repartition("A")
Run Code Online (Sandbox Code Playgroud)上述操作将分区的数量attributes
从70K减少到200。分区的details
数量约为1100。
details_attributes = details_repartitioned.join(broadcast(
attributes_repartitioned), "A", how='left_outer') # tried without broadcast too
Run Code Online (Sandbox Code Playgroud)毕竟,join
仍然无法使用。我仍在学习PySpark,因此我可能误解了重新分区背后的基础知识。如果有人可以阐明这一点,那就太好了。
PS我已经看过这个 …
我创建了我的情节系列的视频,如下所示:
clc;
clear;
close all;
r0=1;
theta=0:0.01:2*pi;
a=0.2;
psi=0;
writerObj = VideoWriter('shapes.mp4'); % Name it.
writerObj.FrameRate = 1; % How many frames per second.
open(writerObj);
for k=1:3
pause(1);
r=r0+a*sin(k*theta+psi)+a*sin((k+1)*theta+psi)+a*sin((k+2)*theta+psi)+a*sin((k+3)*theta+0.8*pi);
figure();
x=r.*cos(theta);
y=r.*sin(theta);
plot(x,y);
axis([-2 2 -2 2]);
% axis equal
grid on
%%%%%%%%% Finding Area %%%%%%%%%%%%%
A = polyarea(x,y);
title({'line1',['Area = ' num2str(A)]})
% title(['Area = ' num2str(A)]);
set(gcf,'renderer','zbuffer');
view(2)
frame = getframe(gcf);
writeVideo(writerObj, frame);
close all
end
close(writerObj); % Saves the movie.
Run Code Online (Sandbox Code Playgroud)
但是当你观看视频时,它的质量很差(我的意思是质量差,例如以 jpeg 格式导出 matlab 图时的质量)。
对于 matlab …
在卷积神经网络中,如何知道特定转换层的输出?(我正在使用keras构建CNN模型)
例如,如果我使用一维转换层,其中number_of_filters = 20,kernel_size = 10和input_shape(500,1)
cnn.add(Conv1D(20,kernel_size=10,strides=1, padding="same",activation="sigmoid",input_shape=(Dimension_of_input,1)))
Run Code Online (Sandbox Code Playgroud)
如果我使用的是二维转换层,其中number_of_filters = 64,kernal_size =(5,100),input_shape =(5,720,1)(高度,宽度,通道)
Conv2D(64, (5, 100),
padding="same",
activation="sigmoid",
data_format="channels_last",
input_shape=(5,720,1)
Run Code Online (Sandbox Code Playgroud)
以上两个转换层的输出数量是多少?在卷积神经网络中,是否有任何方程可用来了解卷积层的输出数量?
我想实现以下论文“使用超像素池网络的弱监督语义分割”中定义的超像素池层,最初是在 Torch 中实现的(无法实现)。我希望在 Keras 中使用 Theano 后端来完成(最好)。
我将举一个小例子来展示该层的作用。它需要以下输入:
feature_map
:形状=(batch_size, height, width, feature_dim)
superpixel_map
:形状=(batch_size, height, width)
让我们假设两个小矩阵batch_size = 1, height = width = 2, feature_dim = 1
feature_map = np.array([[[[ 0.1], [ 0.2 ]], [[ 0.3], [ 0.4]]]])
superpixel_map = np.array([[[ 0, 0], [ 1, 2]]])
Run Code Online (Sandbox Code Playgroud)
现在,输出的形状为 = (batch_size, n_superpixels, feature_dim)
。这里n_superpixels
基本上就是 = np.amax(superpixel_map) + 1
。
输出计算如下。
找到位置其中superpixel_map == i
,其中从到i
变化。让我们考虑一下。的位置是和0
n_superpixels - 1
i = 0
i = …
我正在尝试在 c 项目中使用 protobuf-c 来传输一些数据。此处缺少“字符串”和“字节”数据类型的示例
任何人都可以为那些提供一个小例子吗?我的问题是我不知道如何为具有这些数据类型的消息分配内存,因为它们的大小在编译时是未知的。
如何使用调度队列提高应用程序的下载速度?
我正在使用调度队列在我的应用程序中下载图像,但是第一次下载时需要时间,因为之后我将它们存储到缓存中.但我想第一次更快地下载它们.
任何人都可以建议我使用调度队列吗?
matlab ×3
keras ×2
animation ×1
apache-spark ×1
bigdata ×1
c ×1
caffe ×1
convolution ×1
dataframe ×1
eclipse ×1
ios ×1
iphone ×1
java ×1
keras-layer ×1
malloc ×1
opencv ×1
performance ×1
plot ×1
pyspark ×1
python ×1
tensorflow ×1
theano ×1
video ×1
windows ×1