繁体   English   中英

在 Keras.model.fit 中输入什么作为 Y 以及如何将不同尺寸的数据批次拟合到 Keras Z20F35E630DAF494DFAC 中?

[英]What to input in Keras.model.fit as Y and how do I fit different dimensions batches of data to Keras model?

我有一些数据,我尝试使用 Keras model 来处理它。 TLDR

1 、model.fit()中第二个参数的作用是什么, validation_data参数的作用是什么? 我将 ground_truth 放入y中,而我没有放入validation_data ,这导致无法使用回调参数

2.如何对以下数据结构使用批处理?

我的数据由 numpy arrays 对组成:

  • 训练数据,形状( x ,128)
  • ground_truth(概率分数),形状( x ,)

其中x在 3000-35000 之间的差异取决于文件,但对于 arrays 来说都是相同的。

正如之前的研究发现卷积 model 最适合我的目的,我创建了一个 model,输入 (128,128,1) 并为每个提到的x返回单个概率分数

model = keras.Sequential()
model.add(layers.Convolution2D(16, (3, 3),padding='valid',input_shape=(128, 128, 1),strides=2,kernel_initializer='glorot_normal',kernel_regularizer=l2(reg_amount),bias_regularizer=l2(reg_amount)))
model.add(layers.Activation('relu'))
model.add(BatchNormalization())
       #Some other layers
model.add(layers.Dense(1,kernel_initializer='glorot_normal',kernel_regularizer=l2(reg_amount),bias_regularizer=l2(reg_amount)))
model.add(layers.Activation('linear'))

model.build()
model.summary()

optimizer = keras.optimizers.SGD(learning_rate=1e-3)
loss_fn = keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(loss='msle', optimizer=sgd)

然后我尝试安装这个 model 并且我无法使用批处理来完成它。 我将 training_data 作为第一个参数,将 ground_truth 作为第二个参数:

    spec_file = np.load ('data.npy')              
    anno_file = np.load ('ground_truth.npy')

    hist = model.fit(spec_file, anno_file,batch_size=128,verbose=0,)

我收到以下错误消息:

ValueError:数据基数不明确:x 大小:128 y 大小:9801 确保所有 arrays 包含相同数量的样本。

我尝试交换尺寸,转置但错误消息是相同的。

我使用 for 循环从每个数组中只取一批,得到 (128,128) 和 (,128) 形状,它导致适合 function 工作:

for n in range (0,(np.shape(anno_file[0])-128),1):
        mel_spect = np.array(spec_file[0:128,n:n+128])      #(128,128)
        mel_spect = mel_spect[np.newaxis, ...]              #(1,128,128)

        ground_truth = np.array(anno_file[n:n+128])         #(128,)
        ground_truth = ground_truth[np.newaxis, ... ]       #(1,128,)

        hist = model.fit(mel_spect, ground_truth, verbose=0 ) 
        losses.append(hist.history['loss'] )

所以基本上我为每个分析的文件都安装了这个 model 数千次,我有一种感觉,这是不对的。 我应该能够分批推送这些数据,但我不知道如何。 我也觉得我对 fit() function 的理解是错误的。

请告知您如何将这些数据放入 keras 中,因为经过几天的尝试,我完全不知道。 非常感谢。

第一个问题

如果我正确理解了您的第一个问题,我认为您将训练基础事实与验证数据混淆了。

model.fit()中的第二个参数用于为您的训练数据指定训练 ground-truth 该集合必须与您在x参数中指定的一致。 Keras 文档

y:目标数据。 与输入数据 x 一样,它可以是 Numpy 数组或 TensorFlow 张量。 它应该与 x 一致

validation_data参数指的是完全不同的东西。 在这里,您从整个数据(和相应的标签)中指定一个子集,该子集将仅用于计算为每个 epoch 获得的训练指标。

也许举个例子可能更容易理解。 假设您正在尝试对猫和狗的图像进行分类。 每个图像只能包含狗或猫,因此其图像标签可以是简单的 integer:0 表示狗,1 表示猫。 这里, x指的是图像, y指的是 integer 标签。

如果要使用validation_data参数,则需要进行先前的拆分(参见sklearn 模块中的train_test_split方法),指定训练-测试比率。 结果,您会收到一个包含 4 个值的元组: x_train, x_test, y_train, y_test x_test, y_test中包含的那些可以直接提供给validation_data参数。

第二个问题

这个问题已经在另一个 SO 帖子中得到处理。 检查一下,也许它可以帮助你;)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM