Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有多个输入的tf.keras.backend.function在tf.data管道中抛出错误 序言_Python_Tensorflow_Machine Learning_Keras_Neural Network - Fatal编程技术网

Python 具有多个输入的tf.keras.backend.function在tf.data管道中抛出错误 序言

Python 具有多个输入的tf.keras.backend.function在tf.data管道中抛出错误 序言,python,tensorflow,machine-learning,keras,neural-network,Python,Tensorflow,Machine Learning,Keras,Neural Network,神经网络作为一种强大的网络有着丰富的历史。在第一篇论文中,研究人员使用样式转换来变换imagenet图像的纹理,从而提高了性能。在第二种情况下,研究人员使用嵌入产生的扰动将数据点转换为新样本,从而提高性能。这些只是我脑海中的前两个例子 问题 考虑到使用神经网络增强数据的优势,我试图在自己的tf.data管道中使用它们。我使用TF2.2。虽然数据增强网络(augmenter)和分类器(base)都在tf.data之外工作,但它们在tf.data管道中似乎发挥不了很好的作用。下面的代码试图将embe

神经网络作为一种强大的网络有着丰富的历史。在第一篇论文中,研究人员使用样式转换来变换imagenet图像的纹理,从而提高了性能。在第二种情况下,研究人员使用嵌入产生的扰动将数据点转换为新样本,从而提高性能。这些只是我脑海中的前两个例子

问题 考虑到使用神经网络增强数据的优势,我试图在自己的tf.data管道中使用它们。我使用TF2.2。虽然数据增强网络(augmenter)和分类器(base)都在tf.data之外工作,但它们在tf.data管道中似乎发挥不了很好的作用。下面的代码试图将embeddings和embeddings2转换为一个新的数据点X。要清楚,这段代码只是创建一个最小的示例

import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import *

target = np.random.choice([0,1], size = 10000)
embeddings = np.random.normal(size = (target.shape[0], 100)).astype(np.float32)
embeddings2 = np.random.normal(size = (target.shape[0], 100)).astype(np.float32)

def get_Augmenter():
    input_dims = embeddings.shape[1]
    inp = Input(shape = (input_dims,), name ='input')
    inp2 =Input(shape = (input_dims,), name ='input2')
    concat = Concatenate(axis=1, name= 'Encoder_concat')([inp, inp2])
    hidden = Dense(10, activation = 'relu', name = 'hidden')(concat)
    out = Dense(input_dims, activation = 'relu', name='output')(hidden)
    Augmenter = tf.keras.models.Model(inputs =[inp, inp2], outputs=out)
    return Augmenter

Augmenter = get_Augmenter()
inputs = [Augmenter.get_layer(name='input').input, Augmenter.get_layer(name='input2').input] 
outputs = Augmenter.get_layer(name='output').output
Aug_Func = tf.keras.backend.function(inputs = inputs, outputs = outputs)

X = Auto_Func([embeddings, embeddings2])
上面的代码创建了扩展数据:X。将其放入训练循环有点难看,但它可以工作:

#Base Classifier
inp = Input((embeddings.shape[1],))
x = Dense(1, activation = 'sigmoid')(inp)
base = tf.keras.models.Model(inputs = inp, outputs = x)
base.compile(optimizer='adam',loss='mae')

EPOCHS = 5
for epoch in range(EPOCHS):
    #transform the input via Aug_Func
    np.random.shuffle(embeddings)
    np.random.shuffle(embeddings2)
    X = Aug_Func([embeddings, embeddings2])    
    base.fit(x=X, y=target)
当我尝试将代码放入tf.data时,我得到以下错误

func() takes 1 positional argument but 2 were given
我知道在tf.data内部进行神经增强并不重要。如果没有其他目的,除了我自己的教诲,我怎么能让Aug_Func在tf.数据管道中工作

#Below is function for use inside dataset.map
def tf_aug_transform(var1, var2):
    var1_shape = var1.shape
    [var1,] = tf.py_function(Aug_Func, [var1, var2], [tf.float32]) 
    var1.set_shape(var1_shape) 
    return var1

def get_dataset(X,X2, y, batch_size = 32):
    train_ds = tf.data.Dataset.from_tensor_slices((X, X2, y))
    train_ds = train_ds.batch(batch_size)
    train_ds = train_ds.map(lambda var1,var2,y: (tf_aug_transform(var1,var2), y)) 
    return train_ds

temp = get_dataset(embeddings, embeddings2, target, 64)
for elem in temp:
    print(elem)