vgg网络在病理图像数据集的应用

一、vgg网络设计

def vgg(conv_arch):
    net = tf.keras.models.Sequential()
    # 卷积层部分
    for (num_convs, num_channels) in conv_arch:
        net.add(vgg_block(num_convs, num_channels))
    # 全连接层部分
    net.add(tf.keras.models.Sequential([
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(1024, activation='relu'),
        tf.keras.layers.Dropout(0.5),
        tf.keras.layers.Dense(1024, activation='relu'),
        tf.keras.layers.Dropout(0.5),
        tf.keras.layers.Dense(20)]))
    return net

最后使用20个输出的全连接层。


二、学习率、轮数和批大小设置

lr, num_epochs, batch_size = 0.03, 15, 16

三、使用工具包的函数读取数据集

train_pos, train_neg, test_pos, test_neg = gds.train_test_pos_neg_partition(train_ratio=0.7)
train_pids = train_pos + train_neg
test_pids = test_pos + test_neg

train_pics = gds.sampling(k=80*len(train_pos+train_neg), pids=train_pos+train_neg) 
train_pics.label_map, train_pics.normalize_func = lb, nf


test_pics = gds.sampling(k=2800, pids=test_pos+test_neg)
test_pics.label_map, test_pics.normalize_func = lb, nf

四、使用tf框架data.dataset创建数据迭代器

train_X, train_y = train_pics.load_data_and_label_np()
train_iter = tf.data.Dataset.from_tensor_slices((train_X, train_y)).batch(batch_size)


test_X, test_y = test_pics.load_data_and_label_np()
test_iter = tf.data.Dataset.from_tensor_slices((test_X, test_y)).batch(batch_size)

五、构建通道数较小的网络

ratio = 4
small_conv_arch = [(pair[0], pair[1] // ratio) for pair in conv_arch]
net = lambda: vgg(small_conv_arch)

六、训练结果

在这里插入图片描述


七、分析

首先训练轮数比较少,因为发现训练轮数增加后会出现过拟合的现象,考虑可能是因为训练集数据太少或是网络结构过于复杂,也有可能是图像中存在噪声。训练使用了88个病例的各80张总共7040张图片感觉应该不会少,使用的vgg网络块也不多,卷积层和全连接层一共才11个,感觉应该也不是网络复杂程度的问题(有待考究)。

一开始测试集的准确率就不是从0.5附近开始,所以会不会是测试集里面阴性阳性数量不均衡?


改进

接下来的想法是:
1.换一些常见的网络用同样的数据再跑
2.尝试使用更直观的数据集组织方式和读取方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值