Esempio n. 1
0
def template(x_shape=[2, 3],
             feature_size=5,
             vocabulary_size=6,
             x_order=OrderNT,
             w_order=OrderCN,
             y_order=OrderNTC,
             description: str = ""):
    x = Variable(x_shape, order=x_order)

    vx = np.random.randint(low=0,
                           high=vocabulary_size,
                           size=(x.shape_dict[Axis.N],
                                 x.shape_dict[Axis.T]))  # OrderNT
    vw = np.random.rand(vocabulary_size, feature_size)  # OrderCN
    vy = vw[vx]  # OrderNTC

    w = ConstantVariable(vw, order=OrderCN)
    y, = Embedding(None)(x, w)

    x = x.change_order(x_order)
    w = w.change_order(w_order)
    y = y.change_order(y_order)

    generate_kernel_test_case(
        description=f"Embedding {description}",
        backend=["webgpu", "webassembly"],
        graph=Graph([x], [y]),
        inputs={x: vx.transpose([OrderNT.axes_dict[a] for a in x.order.axes])},
        expected={
            y: vy.transpose([OrderNTC.axes_dict[a] for a in y.order.axes])
        })
Esempio n. 2
0
def _convert_embedding(converter: KerasConverter,
                       k_op: "keras.layers.Embedding"):
    x = converter.get_variable(converter.get_input_tensor(k_op)[0])
    x = x.reinterpret_axes(OrderNT)

    w = converter.convert_to_constant_variable(k_op.embeddings, OrderCN)

    y, = Embedding(None)(x, w)
    converter.set_variable(converter.get_output_tensor(k_op)[0], y)
Esempio n. 3
0
def template(N=2, T=3, vocabulary_size=4, feature_size=5, order_x=OrderNT, order_w=OrderNC):
    x = Variable([N, T], OrderNT)
    w = Variable([feature_size, vocabulary_size], OrderNC)

    x.change_order(order_x)
    w.change_order(order_w)

    y, = Embedding(None)(x, w)

    assert_shape(y, AxisKeyDict([Axis.N, Axis.T, Axis.C], [N, T, feature_size]))
Esempio n. 4
0
def _convert_embedding(converter: KerasConverter, k_op: keras.layers.Embedding):
    x = converter.get_variable(converter.get_input_tensor(k_op)[0])

    if x.order == OrderNC:
        x, = ReinterpretAxis(None, in_order=OrderNC, out_order=OrderNT)(x)

    w = converter.convert_to_constant_variable(k_op.embeddings, OrderCN)

    y, = Embedding(None)(x, w)
    converter.set_variable(converter.get_output_tensor(k_op)[0], y)
Esempio n. 5
0
def test_general():
    vx = np.array([[2, 4, 3]])
    vw = np.arange(15).reshape(5, 3)
    vy = vw[vx]

    x = Variable(vx.shape, order=OrderNT)
    w = ConstantVariable(vw, order=OrderCN)
    y, = Embedding(None)(x, w)

    generate_kernel_test_case(description=f"Embedding",
                              backend=["webgpu"],
                              graph=Graph([x], [y]),
                              inputs={x: vx},
                              expected={y: vy})
def generate_graph_model2(caption_net, hidden_num):
    # inputs
    var_input_img = Variable([1, 1, hidden_num], OrderNTC)
    var_input_word = Variable([1, 1], OrderNT)
    var_switch_img = Variable([1, 1, hidden_num], OrderNTC)
    var_switch_word = Variable([1, 1, hidden_num], OrderNTC)
    var_last_h = Variable([1, hidden_num], OrderNC)
    var_last_c = Variable([1, hidden_num], OrderNC)

    # prepare for lstm
    var_emb_word, = Embedding(None)(var_input_word,
                                    ConstantVariable(
                                        caption_net.word_vec.W.data,
                                        OrderCN))  # OrderNTC
    var_lstm_input = (var_emb_word * var_switch_word) + \
        (var_input_img * var_switch_img)

    # lstm
    lstm_opr = LSTM(None,
                    use_bias=True,
                    return_sequences=False,
                    activation="tanh",
                    recurrent_activation="sigmoid",
                    use_initial_h=True,
                    use_initial_c=True)
    w_input = _convert_lstm_to_webdnn_order(caption_net.lstm.upward.W.data.T)
    w_hidden = _convert_lstm_to_webdnn_order(caption_net.lstm.lateral.W.data.T)
    b = _convert_lstm_to_webdnn_order(
        caption_net.lstm.upward.b.data[None, :])[0]
    var_lstm_h, var_lstm_c = lstm_opr(
        x=var_lstm_input,
        w_input=ConstantVariable(w_input, OrderCN),
        w_hidden=ConstantVariable(w_hidden, OrderCN),
        b=ConstantVariable(b, OrderC),
        initial_h=var_last_h,
        initial_c=var_last_c)

    # word probability
    var_word_score, = Linear(None)(var_lstm_h,
                                   ConstantVariable(
                                       caption_net.out_word.W.data.T, OrderCN))
    var_word_score_biased, = AxiswiseBias(None, axis=Axis.C)(
        var_word_score, ConstantVariable(caption_net.out_word.b.data, OrderC))
    var_word_prob, = Softmax(None, axis=Axis.C)(var_word_score_biased)

    return Graph([
        var_input_img, var_input_word, var_switch_img, var_switch_word,
        var_last_h, var_last_c
    ], [var_word_prob, var_lstm_h, var_lstm_c])