【问题标题】:Multiple Inputs with different sample size in Neural Networks神经网络中具有不同样本大小的多个输入
【发布时间】:2019-12-18 07:59:05
【问题描述】:

我正在研究一个特定的神经网络,它有两个不同的输入:

  • MNIST 数据集,训练集是 [50000,784] 张量
  • 具有 TensorShape([Dimension(28)])] 的辅助向量

当我定义和运行模型时,如下所示

from tensorflow.examples.tutorials.mnist import input_data
from keras.layers import Input, Dense, Lambda
from keras.models import Model
from keras.objectives import binary_crossentropy
from keras.callbacks import LearningRateScheduler
import numpy as np
import keras
import matplotlib.pyplot as plt
import keras.backend as K
import tensorflow as tf
from keras.callbacks import LambdaCallback

def load_dataset(flatten=False):
    (X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
    # normalize x
    X_train = X_train.astype(float) / 255.
    X_test = X_test.astype(float) / 255.
    # we reserve the last 10000 training examples for validation
    X_train, X_val = X_train[:-10000], X_train[-10000:]
    y_train, y_val = y_train[:-10000], y_train[-10000:]
    if flatten:
        X_train = X_train.reshape([X_train.shape[0], -1])
        X_val = X_val.reshape([X_val.shape[0], -1])
        X_test = X_test.reshape([X_test.shape[0], -1])
    return X_train, y_train, X_val, y_val, X_test, y_test
X_train, y_train, X_val, y_val, X_test, y_test = load_dataset(True)

original_dim=784
m = 100 #batchsize
n_z =8
n_epoch = 10
n_d =int(n_z*(n_z - 1 )/2) #or n_d=28

A_vec = K.random_normal(shape=(n_d,), mean=0., stddev=1.)
image_inputs = Input(shape=(784,))
A_inputs = Input(shape=(n_d,))
inputs = keras.layers.concatenate([image_inputs, A_inputs])

h_q1 = Dense(512, activation='relu')(inputs)
h_q2 = Dense(256, activation='relu')(h_q1)
h_q3 = Dense(128, activation='relu')(h_q2)
h_q4= Dense(64, activation='relu')(h_q3)
mu = Dense(n_z, activation='linear')(h_q4)
log_sigma = Dense(n_z, activation='linear')(h_q4)

 ............

运行模型后,

vae.fit([X_train,A_vec], outputs,shuffle=True, batch_size=m, epochs=n_epoch)

我收到此错误:

ValueError: 所有输入数组 (x) 应具有相同数量的 样品。得到数组形状:[(50000, 784), TensorShape([Dimension(28)])]

这意味着我的输入有不同的大小。当它们具有不同的大小(或形状)时,我如何使用不同的输入?

【问题讨论】:

  • 第二个向量的目的是什么?每个样本都需要一个不同的向量吗?
  • @MatiasValdenegro 我的模型是密度估计,我想找到解释我的数据的多元高斯分布的分布。 log_sigma 包含方差值,而我想在模型变量之间添加依赖关系。这个向量帮助我估计变量之间的协方差和相关性。其实就是我的变量之间依赖关系的辅助初始化。所以,我认为每个样本不需要不同的向量,一个就足够了。

标签: python tensorflow keras neural-network keras-layer


【解决方案1】:

输入必须具有相同的大小,例如(50000, 748) 和 (50000, 28),即每个样本一个。尝试为A_vec:numpy.random.normal(0., 1.0, (50000, 28) 创建一个 numpy 数组大小 (50000, 28)。

或者,如果您想要所有人都使用相同的向量,请创建它并重复 50000 次。

【讨论】:

    猜你喜欢
    • 2021-04-05
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2016-10-21
    • 2018-06-22
    相关资源
    最近更新 更多