MCPcopy Create free account
hub / github.com/davisking/dlib / scale_channels

Function scale_channels

dlib/cuda/cpu_dlib.cpp:158–218  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

156 // ------------------------------------------------------------------------------------
157
158 void scale_channels (
159 bool add_to,
160 tensor& dest,
161 const tensor& src,
162 const tensor& scales
163 )
164 {
165 DLIB_CASSERT(have_same_dimensions(dest,src) &&
166 scales.num_samples() == src.num_samples() &&
167 scales.k() == src.k() &&
168 scales.nr() == 1 &&
169 scales.nc() == 1 );
170
171 if (dest.size() == 0)
172 return;
173
174 if (add_to)
175 {
176 auto d = dest.host();
177 auto s = src.host();
178 auto scal = scales.host();
179
180 for (long n = 0; n < src.num_samples(); ++n)
181 {
182 for (long k = 0; k < src.k(); ++k)
183 {
184 const auto scale = scal[n*scales.k() + k];
185 for (long r = 0; r < src.nr(); ++r)
186 {
187 for (long c = 0; c < src.nc(); ++c)
188 {
189 *d++ += (*s++) * scale;
190 }
191 }
192 }
193 }
194
195
196 }
197 else
198 {
199 auto d = dest.host_write_only();
200 auto s = src.host();
201 auto scal = scales.host();
202
203 for (long n = 0; n < src.num_samples(); ++n)
204 {
205 for (long k = 0; k < src.k(); ++k)
206 {
207 const auto scale = scal[n*scales.k() + k];
208 for (long r = 0; r < src.nr(); ++r)
209 {
210 for (long c = 0; c < src.nc(); ++c)
211 {
212 *d++ = (*s++) * scale;
213 }
214 }
215 }

Callers 5

test_scale_channelsFunction · 0.50
forwardMethod · 0.50
backwardMethod · 0.50
forwardMethod · 0.50
backwardMethod · 0.50

Calls 8

have_same_dimensionsFunction · 0.70
num_samplesMethod · 0.45
kMethod · 0.45
nrMethod · 0.45
ncMethod · 0.45
sizeMethod · 0.45
hostMethod · 0.45
host_write_onlyMethod · 0.45

Tested by 1

test_scale_channelsFunction · 0.40