Я хочу выполнить линейное преобразование в функции потерь, умножив данные с разреженной матрицей.
Я написал несколько фиктивных кодов для этого, пожалуйста, помогите мне преобразовать это:
from __future__ import absolute_import, division, print_function, unicode_literals
import numpy as np
import pandas as pd
from scipy import sparse
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# I have a 0-1 sparse matrix
sparse_matix = sparse.random(1000, 20, density=.2, format='coo', data_rvs=np.ones,dtype='f' ).astype('int8')
sparse_matix # <1000x20 sparse matrix of type '<class 'numpy.int8'>' with 4000 stored elements in COOrdinate format>
# Dummy data generator
def data_gen():
for i in range(100):
yield np.random.normal(size=(500, 1000)).astype('float32')
dataset = tf.data.Dataset.from_generator(data_gen, output_types=np.dtype('float32'), output_shapes=(500, 1000)).batch(5)
dataset_batch = dataset.__iter__().__next__()
dataset_batch.shape # TensorShape([5, 500, 1000])
def fn(dataset_batch): # i want this function to written completly in tensorflow, so that i can use this in my loss function
dataset_batch = dataset_batch.numpy()
return np.array([dataset_batch[i]*sparse_matix for i in range(dataset_batch.shape[0])]) # mutiple with sparse matrix
fn(dataset_batch).shape # (5, 500, 20)
Пожалуйста, помогите мне написать fn с помощью tenorflow. Слой Tensorflow будет в порядке