1、利用caffe训练期间,内存需要多少,内存中都保存了学什么?
内存需要保存一个训练周期中的所有 feature map 数据+网络参数数据
受bach_size 及网络模型大小关系较大。
2、利用训练好的模型文件.caffemodel如何初始化网络模型文件 .prototxt?
- matlab 接口:
net=caffe.Net()
net.copy_from() - caffe 源码解释:
调用函数:caffe_net.CopyTrainedLayersFrom(FLAGS_weights);
利用 .caffemodel文件中与网络模型文件(.prototxt)网络层名称一致的参数进行赋值,与其网络名称不一致的不做处理,默认是随机初始化。
template <typename Dtype>
void Net<Dtype>**::CopyTrainedLayersFrom(const NetParameter& param)** {
int num_source_layers = param.layer_size();
for (int i = 0; i < num_source_layers; ++i) {
const LayerParameter& source_layer = param.layer(i);
const string& source_layer_name = source_layer.name();
int target_layer_id = 0;
while (target_layer_id != layer_names_.size() &&
layer_names_[target_layer_id] != source_layer_name) {
++target_layer_id;
}
if (target_layer_id == layer_names_.size()) {
LOG(INFO) << "Ignoring source layer " << source_layer_name;
continue;
}
DLOG(INFO) << "Copying source layer " << source_layer_name;
vector<shared_ptr<Blob<Dtype> > >& target_blobs =
layers_[target_layer_id]->blobs();
CHECK_EQ(target_blobs.size(), source_layer.blobs_size())
<< "Incompatible number of blobs for layer " << source_layer_name;
for (int j = 0; j < target_blobs.size(); ++j) {
if (!target_blobs[j]->ShapeEquals(source_layer.blobs(j))) {
Blob<Dtype> source_blob;
const bool kReshape = true;
source_blob.FromProto(source_layer.blobs(j), kReshape);
LOG(FATAL) << "Cannot copy param " << j << " weights from layer '"
<< source_layer_name << "'; shape mismatch. Source param shape is "
<< source_blob.shape_string() << "; target param shape is "
<< target_blobs[j]->shape_string() << ". "
<< "To learn this layer's parameters from scratch rather than "
<< "copying from a saved net, rename the layer.";
}
const bool kReshape = false;
target_blobs[j]->FromProto(source_layer.blobs(j), kReshape);
}
}
}