ageron / ageron/handson-ml2

[Chapter 14] ResidualUnit

未關閉
#320 3 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
enhancement
主要語言
Jupyter Notebook
星號
30k
分支
13.1k
PR 合併指標
30 天內沒有已合併 PR

描述

I would like to implement a clean custom residual unit. Aurélien provides this one:

```
from tensorflow import keras
from functools import partial

DefaultConv2D = partial(keras.layers.Conv2D, kernel_size=3, strides=1, padding="SAME", use_bias=False)

class ResidualUnit(keras.layers.Layer):
def __init__(self, filters, strides=1, activation="relu", **kwargs):
super().__init__(**kwargs)

self.activation = keras.activations.get(activation)

self.main_layers = [
DefaultConv2D(filters, strides=strides),
keras.layers.BatchNormalization(),
self.activation,
DefaultConv2D(filters),
keras.layers.BatchNormalization()
]

self.skip_layers = []
if strides > 1:
self.skip_layers = [
DefaultConv2D(filters, kernel_size=1, strides=strides),
keras.layers.BatchNormalization()
]

def call(self, inputs):
Z = inputs
for layer in self.main_layers:
Z = layer(Z)
skip_Z = inputs
for layer in self.skip_layers:
skip_Z = layer(skip_Z)
return self.activation(Z + skip_Z)
```

The issue with this custom layer is there are no get_config() method.

I tried to implement one:

```
class ResidualUnit(keras.layers.Layer):
[...]

def get_config(self):
base_config = super().get_config()
return {**base_config,
"main_layers": self.main_layers,
"skip_layers": self.skip_layers,
"activation": self.activation}
```

But when I call the get_config method I have an error message : TypeError: can't pickle _thread.RLock objects.

Can someone help me with this ?

貢獻指南

這個儲存庫沒有索引到貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。