신경 망 을 만 드 는 keras 와 tensorflow 방법 비교
4005 단어 빅 데이터 / 머 신 러 닝 / 인공지능
tensor flow 공식 MNIST 예 를 직접 가 져 와 비교:
1、tf.layers
def model_fn(features, labels, mode, config):
"""
tf.layers
:param features:
:param labels:
:param mode: :tf.estimator.ModeKeys:TRAIN、EVAL、PREDICT
:param config
:return:
"""
# -1 28x28 1
batch_size = -1
image_width = 28
image_height = 28
channels = 1
class_num = 10
learning_rate = 1e-4
input_height = image_height
input_width = image_width
# :
input_layer = tf.reshape(features['x'], [batch_size, image_height, image_width, channels])
# 1: 32 5x5 + ReLU
conv1 = tf.layers.conv2d(inputs=input_layer,
filters=32,
kernel_size=[5, 5],
padding='same',
activation=tf.nn.relu)
# 1: 2x2 + 2
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)
input_height = input_height // 2
input_width = input_width // 2
# 2: 64 5x5 + ReLU
conv2 = tf.layers.conv2d(inputs=pool1,
filters=64,
kernel_size=[5, 5],
padding='same',
activation=tf.nn.relu)
# 2
pool2 = tf.layers.max_pooling2d(inputs=conv2, pool_size=[2, 2], strides=2)
input_height = int(input_height // 2)
input_width = int(input_width // 2)
pool2_flat = tf.reshape(pool2, [-1, input_height * input_width * 64])
# : 1024 + 0.4
dense = tf.layers.dense(inputs=pool2_flat, units=1024, activation=tf.nn.relu)
dropout = tf.layers.dropout(inputs=dense, rate=0.4, training=mode == tf.estimator.ModeKeys.TRAIN)
# : 10 0-9
logits = tf.layers.dense(inputs=dropout, units=class_num)
2、tf.keras
def create_model(data_format):
"""
Keras
:param data_format:
:return:
"""
image_width = 28
image_height = 28
channels = 1
class_num = 10
if data_format == 'channels_first':
# (batch, channels, height, width) default
input_shape = [channels, image_height, image_width]
else:
# (batch, height, width, channels)
assert data_format == 'channels_last'
input_shape = [image_height, image_width, channels]
layer = tf.keras.layers
# : pool_size=(2,2) strides=(2,2)
max_pool = layer.MaxPool2D((2, 2), (2, 2), padding='same', data_format=data_format)
return tf.keras.Sequential([
layer.Reshape(target_shape=input_shape,
input_shape=(image_height * image_width,)),
layer.Conv2D(filters=32,
kernel_size=5,
padding='same',
data_format=data_format,
activation=tf.nn.relu),
max_pool,
layer.Conv2D(filters=64,
kernel_size=5,
padding='same',
data_format=data_format,
activation=tf.nn.relu),
max_pool,
layer.Flatten(),
layer.Dense(1024, activation=tf.nn.relu),
layer.Dropout(0.4),
layer.Dense(class_num)
])
위의 두 단락 코드 에서 볼 수 있 듯 이 tf. layers 코드 가 약간 많 고 flat 층 의 shape 를 수 동 으로 계산 해 야 합 니 다.한편, tf. keras 는 비교적 간결 하고 스 트림 과 유사 한 네트워크 구축 방식 으로 모델 의 네트워크 를 간단명료 하 게 보 여 준다.
tensor flow 1.11.0 이 발표 되 었 을 때 keras 에 대한 지원 이 강화 되 었 습 니 다. tensor flow 는 keras 를 1 급 네트워크 조작 API 로 업그레이드 할 의향 이 있 음 을 알 수 있 습 니 다. keras 와 tensor flow 는 모두 google 이 므 로 합 리 적 인 자원 통합 을 통 해 tensor flow 의 생태 구 조 를 향상 시 킬 필요 가 있 습 니 다.사실 어떤 것 을 사용 하 든 좋 습 니 다. 자신 이 좋아 하 는 대로 개인 적 으로 keras 의 API 스타일 을 좋아 합 니 다.