def fcn_12_detect(threshold, dropout=False, activation=tf.nn.relu):
imgs = tf.placeholder(tf.float32, [None, 12, 12, 3])
labels = tf.placeholder(tf.float32, [None, 1])
keep_prob = tf.placeholder(tf.float32, name='keep_prob')
with tf.variable_scope('net_12'):
conv1,_ = utils.conv2d(x=imgs, n_output=16, k_w=3, k_h=3, d_w=1, d_h=1, name="conv1")
conv1 = activation(conv1)
pool1 = tf.nn.max_pool(conv1, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding="SAME", name="pool1")
ip1,W1 = utils.conv2d(x=pool1, n_output=16, k_w=6, k_h=6, d_w=1, d_h=1, padding="VALID", name="ip1")
ip1 = activation(ip1)
if dropout:
ip1 = tf.nn.dropout(ip1, keep_prob)
ip2,W2 = utils.conv2d(x=ip1, n_output=1, k_w=1, k_h=1, d_w=1, d_h=1, name="ip2")
pred = tf.nn.sigmoid(utils.flatten(ip2))
target = utils.flatten(labels)
regularizer = 8e-3 * (tf.nn.l2_loss(W1)+100*tf.nn.l2_loss(W2))
loss = tf.reduce_mean(tf.div(tf.add(-tf.reduce_sum(target * tf.log(pred + 1e-9),1), -tf.reduce_sum((1-target) * tf.log(1-pred + 1e-9),1)),2)) + regularizer
cost = tf.reduce_mean(loss)
thresholding_12 = tf.cast(tf.greater(pred, threshold), "float")
recall_12 = tf.reduce_sum(tf.cast(tf.logical_and(tf.equal(thresholding_12, tf.constant([1.0])), tf.equal(target, tf.constant([1.0]))), "float")) / tf.reduce_sum(target)
correct_prediction = tf.equal(tf.cast(tf.greater(pred, threshold), tf.int32), tf.cast(target, tf.int32))
acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
return {'imgs': imgs, 'labels': labels, 'keep_prob': keep_prob,
'cost': cost, 'pred': pred, 'accuracy': acc, 'features': ip1,
'recall': recall_12, 'thresholding': thresholding_12}
评论列表
文章目录