Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change the content in 'layers/wrappers' #141

Merged
merged 5 commits into from
Oct 15, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 24 additions & 30 deletions sources/layers/wrappers.md
Original file line number Diff line number Diff line change
@@ -1,81 +1,76 @@
<span style="float:right;">[[source]](https://github.com/keras-team/keras/blob/master/keras/layers/wrappers.py#L114)</span>
<span style="float:right;">[[source]](https://github.com/keras-team/keras/blob/master/keras/layers/wrappers.py#L116)</span>
### TimeDistributed

```python
keras.layers.TimeDistributed(layer)
```

이 래퍼는 인풋의 모든 시간적 조각에 대해 레이어를 적용합니다.
이 래퍼는 입력값의 모든 시계열 단위에 층<sub>layer</sub>을 적용합니다.

인풋은 적어도 3D 이상이어야 하며, 그 중 색인 1의 차원은
시간 차원으로 인식합니다.
입력값은 최소 3D의 형태를 가져야 하며, 그 중 index 1(두번째 원소)은 시간 차원을 나타냅니다.

32개 샘플로 구성된 배치에서,
각 샘플은 10개의 16차원 벡터로 이루어진 시퀀스라고 가정합니다.
그렇다면 레이어의 배치 인풋 형태는 `(32, 10, 16)`이고,
샘플 차원을 제외한 `input_shape`은 `(10, 16)`이 됩니다.
32개의 표본으로 구성된 배치에서, 10개의 16차원 벡터로 이루어진 시퀀스의 예시를 보겠습니다.
이 예시에서 층의 배치 입력 형태는 `(32, 10, 16)`이고,
배치 차원을 제외한 `input_shape`는 `(10, 16)`입니다.

이어서 `TimeDistributed`를 사용해 10개의 시간 단계 각각에
독립적으로 `Dense` 레이어를 적용할 수 있습니다:
`TimeDistributed`를 사용하여 10개의 시간 단계<sub>timestep</sub>에 독립적으로 `Dense`층을 적용할 수 있습니다.

```python
# 모델의 첫 번째 레이어로써
# 모델의 첫 번째 층으로 사용되었습니다.
model = Sequential()
model.add(TimeDistributed(Dense(8), input_shape=(10, 16)))
# 현재 model.output_shape == (None, 10, 8)
# model.output_shape == (None, 10, 8)
```

이 결과 아웃풋은 `(32, 10, 8)`의 형태를 갖습니다.
이 결과 출력값은 `(32, 10, 8)`의 형태를 가집니다.

차우 레이어에서는 `input_shape`이 필요없습니다:
첫 번째 층 이후에는 `input_shape`를 명시할 필요가 없습니다.

```python
model.add(TimeDistributed(Dense(32)))
# now model.output_shape == (None, 10, 32)
```

이 결과 아웃풋은 `(32, 10, 32)`의 형태를 갖습니다.
이 결과 출력값은 `(32, 10, 32)`의 형태를 가집니다.

`TimeDistributed`는 `Dense`만이 아닌, 예를 들면 `Conv2D` 레이어와 같은
임의의 레이어와 함께 사용할 수 있습니다:
`TimeDistributed`는 `Dense` 아닌 케라스에서 사용 가능한 층에서도 사용할 수 있습니다.
(ex:`Conv2D` 층)

```python
model = Sequential()
model.add(TimeDistributed(Conv2D(64, (3, 3)),
input_shape=(10, 299, 299, 3)))
```

__인수__
__인자__

- __layer__: 레이어 인스턴스.
- __layer__: 인스턴스.

----

<span style="float:right;">[[source]](https://github.com/keras-team/keras/blob/master/keras/layers/wrappers.py#L333)</span>
<span style="float:right;">[[source]](https://github.com/keras-team/keras/blob/master/keras/layers/wrappers.py#L335)</span>
### Bidirectional

```python
keras.layers.Bidirectional(layer, merge_mode='concat', weights=None)
keras.engine.base_layer.wrapped_fn()
```

순환 신경망에 사용하는 양방향 래퍼.

__인수__
__인자__

- __layer__: `Recurrent` 인스턴스.
- __layer__: `RNN` 인스턴스.
- __merge_mode__: 정방향 순환 신경망과
역방향 순환 신경망의 아웃풋이 병합되는 방식.
{'sum', 'mul', 'concat', 'ave', None} 중 하나.
None의 경우, 아웃풋이 합쳐지지 않고,
리스트로 반환됩니다.
역방향 순환 신경망의 출력값이 병합되는 방식을 `{'sum', 'mul', 'concat', 'ave', None}`중에 선택합니다.
`None`의 경우, 출력 값이 합쳐지지 않고, 리스트로 반환됩니다.
- __weights__: `Bidirectional` 층에 사용할 초기 가중치

__오류처리__

- __ValueError__: `merge_mode` 인수가 유효하지 않은 경우 오류메시지를 전달합니다.
- __ValueError__: `merge_mode` 인자가 유효하지 않은 경우 오류 메시지를 전달합니다.

__예시__


```python
model = Sequential()
model.add(Bidirectional(LSTM(10, return_sequences=True),
Expand All @@ -85,4 +80,3 @@ model.add(Dense(5))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
```