在这里,在这个代码UpSampling2D并且Conv2DTranspose似乎可以互换使用。我想知道为什么会这样。
# u-net model with up-convolution or up-sampling and weighted binary-crossentropy as loss func
from keras.models import Model
from keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D, concatenate, Conv2DTranspose, BatchNormalization, Dropout
from keras.optimizers import Adam
from keras.utils import plot_model
from keras import backend as K
def unet_model(n_classes=5, im_sz=160, n_channels=8, n_filters_start=32, growth_factor=2, upconv=True,
class_weights=[0.2, 0.3, 0.1, 0.1, 0.3]):
droprate=0.25
n_filters = n_filters_start
inputs = Input((im_sz, im_sz, n_channels))
#inputs = BatchNormalization()(inputs)
conv1 = Conv2D(n_filters, (3, 3), activation='relu', padding='same')(inputs)
conv1 = …Run Code Online (Sandbox Code Playgroud) machine-learning convolution computer-vision conv-neural-network deconvolution
我正在通过Caffe原型文本查看深度残留网络,并注意到了"Scale"图层的外观.
layer {
bottom: "res2b_branch2b"
top: "res2b_branch2b"
name: "scale2b_branch2b"
type: "Scale"
scale_param {
bias_term: true
}
}
Run Code Online (Sandbox Code Playgroud)
但是,此图层在Caffe图层目录中不可用.有人可以解释这一层的功能和参数的含义,还是指向Caffe的最新文档?
neural-network deep-learning caffe conv-neural-network resnet
我想使用Keras 做类似于完全卷积网络的论文(https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf).我有一个网络,最终使特征映射变平并通过几个密集层运行它们.我想将这样的网络中的权重加载到一个密集层被等效卷积替换的地方.
可以使用Keras附带的VGG16网络作为示例,其中最后一个MaxPooling2D()的7x7x512输出被展平,然后进入密集(4096)层.在这种情况下,Dense(4096)将被7x7x4096卷积替换.
我的真实网络略有不同,有一个GlobalAveragePooling2D()层而不是MaxPooling2D()和Flatten().GlobalAveragePooling2D()的输出是2D张量,并且不需要另外将其展平,因此包括第一个的所有密集层将被1x1卷积替换.
我已经看到了这个问题:Python keras如何将密集层转换为卷积层,如果不相同则看起来非常相似.问题是我无法得到建议的解决方案,因为(a)我使用TensorFlow作为后端,所以权重重新排列/过滤"旋转"不对,而且(b)我无法想象如何加载权重.将旧权重文件加载到新网络model.load_weights(by_name=True)中不起作用,因为名称不匹配(即使它们的尺寸不同).
使用TensorFlow时重新排列应该是什么?
如何加载重量?我是否创建了每个模型中的一个,在两者上调用model.load_weights()来加载相同的权重,然后复制一些需要重新排列的额外权重?
我有一个训练有素的模型,我已经导出了权重,并希望部分加载到另一个模型中.我的模型使用TensorFlow作为后端在Keras中构建.
现在我正在做如下:
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape, trainable=False))
model.add(Activation('relu', trainable=False))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3), trainable=False))
model.add(Activation('relu', trainable=False))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), trainable=True))
model.add(Activation('relu', trainable=True))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.load_weights("image_500.h5")
model.pop()
model.pop()
model.pop()
model.pop()
model.pop()
model.pop()
model.add(Conv2D(1, (6, 6),strides=(1, 1), trainable=True))
model.add(Activation('relu', trainable=True))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)
我确信这是一种可怕的方式,尽管它有效.
如何加载前9层?
Caffe不仅可以打印整体精度,还可以打印每级精度.
在Keras日志中,只有整体准确性.我很难计算出单独的类精度.
Epoch 168/200
0s - 损失:0.0495 - acc:0.9818 - val_loss:0.0519 - val_acc:0.9796
Epoch 169/200
0s - 损失:0.0519 - acc:0.9796 - val_loss:0.0496 - val_acc:0.9815
大纪元170/200
0s - 损失:0.0496 - acc:0.9815 - val_loss:0.0514 - val_acc:0.9801
谁知道如何在keras中输出每级精度?
python machine-learning neural-network conv-neural-network keras
我知道在小型网络中需要偏置来改变激活函数。但是在具有多层 CNN、池化、dropout 和其他非线性激活的 Deep 网络的情况下,Bias 真的有所作为吗? 卷积滤波器正在学习局部特征,并且对于给定的 conv 输出通道使用相同的偏差。
这不是这个链接的骗局。上述链接仅解释了偏差在小型神经网络中的作用,并没有试图解释偏差在包含多个 CNN 层、drop-outs、池化和非线性激活函数的深层网络中的作用。
我进行了一个简单的实验,结果表明从 conv 层去除偏差对最终测试精度没有影响。 训练了两个模型,测试准确率几乎相同(没有偏差的一个稍微好一点。)
它们是否仅用于历史原因?
如果使用偏差不能提高准确性,我们不应该忽略它们吗?要学习的参数更少。
如果有人比我有更深入的知识,可以解释这些偏见在深度网络中的重要性(如果有的话),我将不胜感激。
这里是完整的代码和实验结果bias-VS-no_bias实验
batch_size = 16
patch_size = 5
depth = 16
num_hidden = 64
graph = tf.Graph()
with graph.as_default():
# Input data.
tf_train_dataset = tf.placeholder(
tf.float32, shape=(batch_size, image_size, image_size, num_channels))
tf_train_labels = tf.placeholder(tf.float32, shape=(batch_size, num_labels))
tf_valid_dataset = tf.constant(valid_dataset)
tf_test_dataset = tf.constant(test_dataset)
# Variables.
layer1_weights = tf.Variable(tf.truncated_normal(
[patch_size, patch_size, num_channels, depth], stddev=0.1))
layer1_biases = tf.Variable(tf.zeros([depth])) …Run Code Online (Sandbox Code Playgroud) python bias-neuron deep-learning conv-neural-network tensorflow
我正在使用Keras创建深度学习模型。创建VGG16模型时,会创建模型,但收到以下警告。
vgg16_model = VGG16()
Run Code Online (Sandbox Code Playgroud)
为什么会发生此警告,我该如何解决?
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
Run Code Online (Sandbox Code Playgroud) ValueError Traceback (most recent call last)
<ipython-input-30-33821ccddf5f> in <module>
23 output = model(data)
24 # calculate the batch loss
---> 25 loss = criterion(output, target)
26 # backward pass: compute gradient of the loss with respect to model parameters
27 loss.backward()
C:\Users\mnauf\Anaconda3\envs\federated_learning\lib\site-packages\torch\nn\modules\module.py in __call__(self, *input, **kwargs)
487 result = self._slow_forward(*input, **kwargs)
488 else:
--> 489 result = self.forward(*input, **kwargs)
490 for hook in self._forward_hooks.values():
491 hook_result = hook(self, input, result)
C:\Users\mnauf\Anaconda3\envs\federated_learning\lib\site-packages\torch\nn\modules\loss.py in forward(self, input, target)
593 self.weight,
594 pos_weight=self.pos_weight,
--> …Run Code Online (Sandbox Code Playgroud) 我正在训练Caffe参考模型来分类图像.我的工作要求我通过在整个训练集和分别具有100K和50K图像的验证集的每1000次迭代之后绘制模型的准确性图来监视训练过程.现在,我采取天真的方法,在每1000次迭代后制作快照,运行C++分类代码,该代码读取原始JPEG图像并转发到网络并输出预测标签.但是,这在我的机器上花费了太多时间(使用Geforce GTX 560 Ti)
有没有更快的方法可以在训练集和验证集上获得快照模型的准确性图表?
我在考虑使用LMDB格式而不是原始图像.但是,我找不到有关使用LMDB格式在C++中进行分类的文档/代码.
keras ×4
python ×3
tensorflow ×3
caffe ×2
bias-neuron ×1
c++ ×1
convolution ×1
pytorch ×1
resnet ×1
size ×1