我正在复制http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html中的步骤
我想将网络更改为VGG模型,该模型可在http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_16_layers.caffemodel获得 .
只需将模型参数替换为以下内容就足够了吗?
./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights VGG_ISLVRC_16_layers.caffemodel -gpu 0
Run Code Online (Sandbox Code Playgroud)
或者我是否需要调整学习率,迭代,即它是否附带单独的原型文件?
根据https://github.com/pytorch/vision/blob/master/torchvision/models/vgg.py
我不明白为什么 VGG 模型采用 512 * 7 * 7 全连接层的 input_size 。最后一个卷积层是
代码在上面的链接中。
class VGG(nn.Module):
def __init__(self, features, num_classes=1000, init_weights=True):
super(VGG, self).__init__()
self.features = features
self.classifier = nn.Sequential(
nn.Linear(512 * 7 * 7, 4096),
nn.ReLU(True),
nn.Dropout(),
nn.Linear(4096, 4096),
nn.ReLU(True),
nn.Dropout(),
nn.Linear(4096, num_classes),
)
Run Code Online (Sandbox Code Playgroud) 有词典:
var dictionary1 = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase)
{{"abc1", 1}, {"abC2", 2}, {"abc3", 3}};
Run Code Online (Sandbox Code Playgroud)
我可以得到一个值:
var value = dictionary1["Abc2"];
Run Code Online (Sandbox Code Playgroud)
如果搜索键"Abc2"我需要获取原始键"abC2"和值2.
如何通过不区分大小写的密钥获取原始案例密钥?
我有一个通用的方法
public async Task Save<T>(T aggregate) where T : AggregateRoot
Run Code Online (Sandbox Code Playgroud)
从这个方法我调用另一个泛型方法
var indexRegistrations = IndexRegistrar.GetAll<T>();
Run Code Online (Sandbox Code Playgroud)
现在在第二个通用方法中,我想得到真正的类型T,它是一个子类型AggregateRoot:
public static List<IndexRegistration> GetAll<T>() where T : AggregateRoot
{
return _register.FindAll(r => r.aggregateType == typeof(T));
}
Run Code Online (Sandbox Code Playgroud)
但是,typeof(T)总是返回AggregateRoot.
我怎样才能得到真实的类型(=子类型AggregateRoot)T?
我正在使用 Theano 和 Keras 并使用以下命令,尝试从 .h5 文件加载 VGG Net 的权重。
VGG 网络模型定义:
def VGG_16(weights_path=None):
model = Sequential()
model.add(ZeroPadding2D((1,1),input_shape=(3,224,224)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu')) …Run Code Online (Sandbox Code Playgroud) 当我尝试使用Caffe和Python(2.7和3.5)从经过预训练的VGG 16/19模型中获取输出时(2.7和3.5),在net.forward()步骤(在笔记本电脑的CPU上)上花费了15秒以上。
我想知道是否有人会建议我这样做,就像其他许多模型(例如ResNet,AlexNet)一样,我在一瞬间就得到了输出,这是迄今为止我发现的唯一一个表现不佳的模型。
我使用的代码如下:
img = cv2.imread(path + img_name + '.jpg')
img = transform_img(img,224,224) #Resizes image.
net = caffe.Net(model_prototxt,model_trained,caffe.TEST)
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))
net.blobs['data'].data[...] = transformer.preprocess('data', img)
start = timer()
out = net.forward()
end = timer()
print('Runtime: ' + "{0:.2f}".format(end-start) + 's')
Run Code Online (Sandbox Code Playgroud)
抱歉,这可能是一个非常新手的问题,在此先感谢所有花时间回答的人。