import tensorflow.compat.v1 as tf import utils tf.compat.v1.disable_eager_execution() def get_model(is_train=False, keep_prob=0.8, alpha=0.8): with tf.variable_scope("model", reuse=not is_train): tf_x = tf.placeholder(tf.float32, shape=[None, utils.IMAGE_HEIGHT, utils.IMAGE_WIDTH, utils.IMAGE_CHANNEL]) tf_y = tf.placeholder(tf.int32, shape=[None]) tf_y_one_hot = tf.one_hot(tf_y, utils.IMAGE_CLASSIFY) # conv 1 filter_1 = tf.Variable(tf.truncated_normal(shape=[5, 5, 3, 32], mean=utils.mu, stddev=utils.sigma)) bias_1 = tf.Variable(tf.constant(0.1, shape=[32])) conv_1 = tf.nn.conv2d(tf_x, filter=filter_1, strides=[1, 2, 2, 1], padding='SAME') + bias_1 leaky_relu_1 = tf.nn.leaky_relu(conv_1, alpha=alpha) # conv 2 filter_2 = tf.Variable(tf.truncated_normal(shape=[3, 3, 32, 48], mean=utils.mu, stddev=utils.sigma)) bias_2 = tf.Variable(tf.constant(0.1, shape=[48])) conv_2 = tf.nn.conv2d(leaky_relu_1, filter=filter_2, strides=[1, 2, 2, 1], padding='SAME') + bias_2 leaky_relu_2 = tf.nn.leaky_relu(conv_2, alpha=alpha) # conv 3 filter_3 = tf.Variable(tf.truncated_normal(shape=[3, 3, 48, 64], mean=utils.mu, stddev=utils.sigma)) bias_3 = tf.Variable(tf.constant(0.1, shape=[64])) conv_3 = tf.nn.conv2d(leaky_relu_2, filter=filter_3, strides=[1, 2, 2, 1], padding='SAME') + bias_3 leaky_relu_3 = tf.nn.leaky_relu(conv_3, alpha=alpha) dropout = tf.nn.dropout(leaky_relu_3, keep_prob=keep_prob) # flatten,Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡 shape = dropout.get_shape().as_list() flatten_size = shape[1] * shape[2] * shape[3] flatten = tf.reshape(dropout, [-1, flatten_size]) # fc 1 filter_4 = tf.Variable(tf.truncated_normal(shape=[flatten.get_shape().as_list()[1], 100], mean=utils.mu, stddev=utils.sigma)) bias_4 = tf.Variable(tf.constant(0.1, shape=[100])) fc_1 = tf.matmul(flatten, filter_4) + bias_4 leaky_relu_4 = tf.nn.leaky_relu(fc_1, alpha=alpha) # fc 2 filter_5 = tf.Variable(tf.truncated_normal(shape=[100, 50], mean=utils.mu, stddev=utils.sigma)) bias_5 = tf.Variable(tf.constant(0.1, shape=[50])) fc_2 = tf.matmul(leaky_relu_4, filter_5) + bias_5 leaky_relu_5 = tf.nn.leaky_relu(fc_2, alpha=alpha) # fc 3 filter_6 = tf.Variable(tf.truncated_normal(shape=[50, 10], mean=utils.mu, stddev=utils.sigma)) bias_6 = tf.Variable(tf.constant(0.1, shape=[10])) fc_3 = tf.matmul(leaky_relu_5, filter_6) + bias_6 leaky_relu_6 = tf.nn.leaky_relu(fc_3, alpha=alpha) # result filter_7 = tf.Variable(tf.truncated_normal(shape=[10, utils.IMAGE_CLASSIFY], mean=utils.mu, stddev=utils.sigma)) bias_7 = tf.Variable(tf.constant(0.1, shape=[utils.IMAGE_CLASSIFY])) result = tf.matmul(leaky_relu_6, filter_7) + bias_7 last_layer = result if is_train else tf.nn.softmax(result) return tf_x, tf_y, tf_y_one_hot, last_layer