다음은 간단한 tensorflow 기능 API 모델입니다.
input1 = tf.keras.layers.Input(shape=(2,), dtype='float32')
output1 = tf.keras.layers.Dense(2)(input1)
model = tf.keras.Model(inputs=input1, outputs=output1)
기능적 API의 일부 예에서는 model ()을 사용하여 출력을 얻지 만 model.predict ()도 있습니다.
위의 예를 사용하여 작업을 예측하십시오.
model.predict([[[1.1, 2.2]]])
>> array([[1.8761028 , 0.20520687]], dtype=float32)
그래도 모델 만 실행하면 오류가 발생합니다.
model([[[1.1, 2.2]]])
>> ... InvalidArgumentError: In[0] is not a matrix [Op:MatMul]
차이점은 무엇이며 오류가 발생하는 이유는 무엇입니까?
감사,
줄리안
오류 상태 model()
는 목록을 제공 한 입력으로 행렬을 예상합니다.
이를 해결하려면 행렬로 변환하십시오.
model(tf.Variable([[[1.1, 2.2]]]))
또는
model(np.array([[[1.1, 2.2]]]))
model()
과 의 차이에 대해model.predict()
"model ()을 사용하여 출력을 얻는"위치를 참조하는 코드 :
left_proba = model(obs[np.newaxis]) # <--- HERE
action = (tf.random.uniform([1, 1]) > left_proba)
y_target = tf.constant([[1.]]) - tf.cast(action, tf.float32)
loss = tf.reduce_mean(loss_fn(y_target, left_proba))
이것은 두 번째 코드 줄과 유사합니다.
output1 = tf.keras.layers.Dense(2)(input1)
이것이 어떻게 유사합니까?
에서 당신의 코드, 당신은 호출하여 층의 그래프에 새로운 노드를 만들고 Dense
이에 대한 레이어 input1
개체를.
"레이어 호출"작업은 input1
만든이 레이어 에서 화살표를 그리는 것과 같습니다 .
입력을 조밀 한 레이어로 "전달"하면 output1
.
에서 참조 코드, 그들은 치료 model
레이어처럼, 그리고 "레이어 호출을"않습니다.
유사성이 보이십니까? :
output = Dense(input)
left_proba = model(obs[...])
차례로 이것은 다른 작업을 수행하는 새로운 노드를 생성합니다 (다음 3 줄에서).
이는 기존 모델을 구성 요소 (또는 "레이어")로 사용 하여 다른 새 모델 을 구축 하려는 경우에 유용합니다 .
모델 추론의 경우 항상을 통해이 작업을 수행합니다 y = model.predict(x)
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다