Skip to content

Commit

Permalink
Merge pull request #141 from airplane2230/patch-6
Browse files Browse the repository at this point in the history
Change the content in 'layers/wrappers'
  • Loading branch information
fuzzythecat authored Oct 15, 2019
2 parents 373765f + 363caff commit ee77a6d
Showing 1 changed file with 24 additions and 30 deletions.
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')
```

0 comments on commit ee77a6d

Please sign in to comment.