43 개의 무게
지금까지 게시 된 두 가지 솔루션은 매우 영리했지만 머신 러닝 (OCR과 같은)의 전통적인 작업에는 그 방법이 효과가 없을 것입니다. 따라서 나는 다른 사람들이 그것을 향상시키고 기계 학습의 세계에 빠져들기를 희망적으로 고무시키는이 작업에 '일반적인'(영리한 트릭 없음) 솔루션을 제출하고 싶습니다.
내 모델은 TensorFlow 2.0에 내장 된 2 개의 숨겨진 레이어가있는 매우 간단한 신경망입니다 (그러나 다른 프레임 워크도 작동합니다).
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(6, activation='tanh', input_shape=(2,)),
tf.keras.layers.Dense(3, activation='tanh'),
tf.keras.layers.Dense(1, activation='linear')
])
보시다시피, 모든 레이어는 밀도가 높으며 (가장 최적의 것은 아님), 활성화 기능은이 작업의 특성상 선형 활성화 기능이 있습니다.
43 개의 가중치가 있습니다 :
- (2+1)⋅6=18
- (6+1)⋅3=21
- (3+1)⋅1=4
−1010
다음으로 정수 곱셈 작업의 최대 편차를 최적화하여 미세 조정했습니다. 불행히도, 내 노트는 내가 끝내었던 미세 조정을 많이 나타내지 않지만 매우 작습니다. 441 개의 훈련 샘플에서 100 개의 신기원 근처에 배치 크기는 441입니다.
이것으로 내가 끝낸 무게는 다음과 같습니다.
[<tf.Variable 'dense/kernel:0' shape=(2, 6) dtype=float32, numpy=
array([[ 0.10697944, 0.05394982, 0.05479664, -0.04538541, 0.05369904,
-0.0728976 ],
[ 0.10571832, 0.05576797, -0.04670485, -0.04466859, -0.05855528,
-0.07390639]], dtype=float32)>,
<tf.Variable 'dense/bias:0' shape=(6,) dtype=float32, numpy=
array([-3.4242163, -0.8875816, -1.7694025, -1.9409281, 1.7825342,
1.1364107], dtype=float32)>,
<tf.Variable 'dense_1/kernel:0' shape=(6, 3) dtype=float32, numpy=
array([[-3.0665843 , 0.64912266, 3.7107112 ],
[ 0.4914808 , 2.1569328 , 0.65417236],
[ 3.461693 , 1.2072319 , -4.181983 ],
[-2.8746269 , -4.9959164 , 4.505049 ],
[-2.920127 , -0.0665407 , 4.1409926 ],
[ 1.3777553 , -3.3750365 , -0.10507642]], dtype=float32)>,
<tf.Variable 'dense_1/bias:0' shape=(3,) dtype=float32, numpy=array([-1.376577 , 2.8885336 , 0.19852689], dtype=float32)>,
<tf.Variable 'dense_2/kernel:0' shape=(3, 1) dtype=float32, numpy=
array([[-78.7569 ],
[-23.602606],
[ 84.29587 ]], dtype=float32)>,
<tf.Variable 'dense_2/bias:0' shape=(1,) dtype=float32, numpy=array([8.521169], dtype=float32)>]
0.443504339⋅10=90.443504
내 모델은 여기 에서 찾을 수 있으며 온라인 에서도 사용해 볼 수 있습니다! Google Colab 환경에서