keras - 模型预测函数和模型 API 函数之间的差异
keras - Difference between model predict function and model API function
我正在尝试从模型中的 SimpleRNN 层获取输出和最终隐藏状态。该模型具有结构:
inp= Input(shape= (input_length,))
emb_out= Embedding(input_dim, output_dim, input_length= input_length,
weights= [Emat], trainable= False)(inp)
rnn_out, rnn_state= SimpleRNN(200, return_state= True)(emb_out)
#out= Dense(1, activation= 'sigmoid')(rnn_out)
model = Model(inputs=inp, outputs=[rnn_out, rnn_state])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_7 (InputLayer) [(None, 1403)] 0
_________________________________________________________________
embedding_10 (Embedding) (None, 1403, 100) 4348900
_________________________________________________________________
simple_rnn_9 (SimpleRNN) [(None, 200), (None, 200) 60200
=================================================================
我注意到当我使用模型预测测试数据时输出的形状不同model.predict(xte)
,
和 model(xte)
当我将测试数据拟合到模型时 API。我需要一些帮助来解释这 2 个操作的区别以及返回的对象所指的内容。
# 1.
all_outs, fin_states= model.predict(xte_pad)
print('Test data shape:', xte_pad.shape)
print(all_outs.shape, fin_states.shape)
>> Test data shape: (2400, 1403)
(2400, 200) (2400, 200)
# 2.
outs= model(xte_pad)
print('Test data shape:', xte_pad.shape)
print(outs.shape)
>> Test data shape: (2400, 1403)
(2400, 1403, 200)
当执行 outs= model(xte_pad)
时,您将得到一个输出列表,并且列表没有 属性 shape
。输出实际上是相同的:
import tensorflow as tf
input_length = 1403
inp= tf.keras.layers.Input(shape= (input_length,))
emb_out= tf.keras.layers.Embedding(500, 100, input_length= input_length, trainable= False)(inp)
rnn_out, rnn_state= tf.keras.layers.SimpleRNN(200, return_state= True)(emb_out)
model = tf.keras.Model(inputs=inp, outputs=[rnn_out, rnn_state])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
model.summary()
xte_pad = tf.random.uniform((10, 1403), maxval=500, dtype=tf.int32)
all_outs, fin_states= model.predict(xte_pad)
print('Test data shape:', xte_pad.shape)
print(all_outs.shape, fin_states.shape)
all_outs, fin_states = model(xte_pad)
print('Test data shape:', xte_pad.shape)
print(all_outs.shape, fin_states.shape)
Test data shape: (10, 1403)
(10, 200) (10, 200)
Test data shape: (10, 1403)
(10, 200) (10, 200)
我正在尝试从模型中的 SimpleRNN 层获取输出和最终隐藏状态。该模型具有结构:
inp= Input(shape= (input_length,))
emb_out= Embedding(input_dim, output_dim, input_length= input_length,
weights= [Emat], trainable= False)(inp)
rnn_out, rnn_state= SimpleRNN(200, return_state= True)(emb_out)
#out= Dense(1, activation= 'sigmoid')(rnn_out)
model = Model(inputs=inp, outputs=[rnn_out, rnn_state])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_7 (InputLayer) [(None, 1403)] 0
_________________________________________________________________
embedding_10 (Embedding) (None, 1403, 100) 4348900
_________________________________________________________________
simple_rnn_9 (SimpleRNN) [(None, 200), (None, 200) 60200
=================================================================
我注意到当我使用模型预测测试数据时输出的形状不同model.predict(xte)
,
和 model(xte)
当我将测试数据拟合到模型时 API。我需要一些帮助来解释这 2 个操作的区别以及返回的对象所指的内容。
# 1.
all_outs, fin_states= model.predict(xte_pad)
print('Test data shape:', xte_pad.shape)
print(all_outs.shape, fin_states.shape)
>> Test data shape: (2400, 1403)
(2400, 200) (2400, 200)
# 2.
outs= model(xte_pad)
print('Test data shape:', xte_pad.shape)
print(outs.shape)
>> Test data shape: (2400, 1403)
(2400, 1403, 200)
当执行 outs= model(xte_pad)
时,您将得到一个输出列表,并且列表没有 属性 shape
。输出实际上是相同的:
import tensorflow as tf
input_length = 1403
inp= tf.keras.layers.Input(shape= (input_length,))
emb_out= tf.keras.layers.Embedding(500, 100, input_length= input_length, trainable= False)(inp)
rnn_out, rnn_state= tf.keras.layers.SimpleRNN(200, return_state= True)(emb_out)
model = tf.keras.Model(inputs=inp, outputs=[rnn_out, rnn_state])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
model.summary()
xte_pad = tf.random.uniform((10, 1403), maxval=500, dtype=tf.int32)
all_outs, fin_states= model.predict(xte_pad)
print('Test data shape:', xte_pad.shape)
print(all_outs.shape, fin_states.shape)
all_outs, fin_states = model(xte_pad)
print('Test data shape:', xte_pad.shape)
print(all_outs.shape, fin_states.shape)
Test data shape: (10, 1403)
(10, 200) (10, 200)
Test data shape: (10, 1403)
(10, 200) (10, 200)