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
我知道图像分类问题的不平衡,例如猫与狗的分类,如果猫图像太多而狗图像太少.但我不知道如何解决分割问题的不平衡.
例如,我的任务是从卫星图像中掩盖云层,因此我将问题转换为两类分割,一类是云,另一类是背景.该数据集具有5800个4波段16位图像,大小为256*256.该体系结构是Segnet,损失函数是二进制交叉熵.
假设有两种情况:
所以,案例2是平衡的我猜,但案例1如何?
在现实和我的任务中,这两种情况在源卫星图像中是不可能的,因为云层总是相对较小的背景,但如果图像样本由于它们的大尺寸而从源图像中裁剪,则会出现一些新的情况.
因此,样本总是包含三种类型的图像:
我的问题:
样品是否不平衡,我该怎么办?
提前致谢.
machine-learning image-processing image-segmentation caffe keras
像这样:
x = keras.layers.Input(shape=(3,))
y = keras.layers.Dense(5)(x)
G = keras.models.Model(x, y,name='G')
G.compile(optimizer='rmsprop', loss='mse')
data_x = np.random.random((10, 3))
data_y = np.random.random((10, 5))
G.fit(data_x,data_y,shuffle=False,validation_data=[data_x,data_y],verbose=1)
Run Code Online (Sandbox Code Playgroud)
结果:
Train on 10 samples, validate on 10 samples
Epoch 1/1
10/10 [==============================] - 27s 3s/step - loss: 0.4482 - val_loss: 0.4389
Run Code Online (Sandbox Code Playgroud)
打印的损失和 val_loss 是不同的。在其他一些测试中,我发现差异是显着的。为什么?
keras版本:2.0.8
在某些Keras度量函数和损失函数中,使用axis = -1作为参数。
例如?
def binary_accuracy(y_true, y_pred):
return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)
Run Code Online (Sandbox Code Playgroud)
就我而言:
y_true的形状:(4,256,256,2)
y_pred的形状:(4,256,256,2)
因此,binary_accuracy(y_true,y_pred)应该返回shape =(4,256,256)的张量,而不是标量张量。
但是,当使用binary_accuracy作为度量函数时:
model.compile(optimizer=adam, loss=keras.losses.binary_crossentropy, metrics=[binary_accuracy])
Run Code Online (Sandbox Code Playgroud)
该日志仍然将binary_accuracy打印为标量,这让我很困惑。
keras在binary_accuracy函数的返回上是否有一些特殊之处?
时代11/300
0s-损失:0.4158-二进制精度:0.9308-val损失:0.4671-val_binary_accuracy:0.7767
我想将大小为 (w,h,channels) 的一层上采样到大小 (w',h',channels),但 Upsample2D 层只能上采样到双倍大小。
任何人都可以告诉我如何进行任何尺寸的上采样?