gpt4 book ai didi

python - Keras 中两个并行但不同的数据集作为多个输入?

转载 作者:行者123 更新时间:2023-12-01 01:08:43 25 4
gpt4 key购买 nike

我一整天都在谷歌上搜索,试图找到 Keras 中两个并行数据集的函数输入示例,但我找不到。

我的问题是我有数据集 1,这是一组人们执行不同操作的图像。它的格式为 csv,如下所示:

image_url,class
example1.png,BRUSH_TEETH
example2,BRUSH_TEETH
...
example10000.png,DANCING

我将对这些进行预处理,并使它们的大小全部为 64x64。我的第二个数据集将是跳跃运动数据,其中每一行都是与数据集 1 中的相应行同时捕获的信息

(忽略列名称和值,我还不确定它们会是什么样子,因为我还没有收集数据,但它们将是一行并与上面的数据集1平行)

x,y,z,a,b,c,d,class
1,2,3,4,5,6,7,BRUSH_TEETH
8,9,10,3,1,3,4,BRUSH_TEETH
...
1,2,3,4,5,6,7,DANCING

我一直在阅读有关功能 API 的内容,似乎我可以通过 CNN 运行数据集 1 中的数据对象,同时通过深度 MLP 等运行数据集 2 中的相同数据对象。然后,使用合并或连接,将最终层的两个输出带到另一个深层 MLP,然后最终将此最终合并模型链接到输出

暂时忘记 CNN,API 给出了一个简单的合并示例,如下所示:

import keras

input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# equivalent to added = keras.layers.add([x1, x2])
added = keras.layers.Add()([x1, x2])

out = keras.layers.Dense(4)(added)
model = keras.models.Model(inputs=[input1, input2], outputs=out)

我的问题是,我需要向 input1(以 CNN 的形式)提供 csv 中包含的图像,同时向 input2 提供包含 Leap Motion 数据的第二个数据集中的相关行。 PS:在上面,在输出之前与两个密集层合并后,我将如何继续模型?难道只是这样:

x3 = keras.layers.Dense(100)(added)
x3 = keras.layers.Dense(50)(x3)
out = keras.layers.Dense(4)(x3)

这可以执行吗?如果是这样,我将非常感谢您的帮助,我正在失去理智,试图弄清楚两个数据集如何保持彼此同步!

一个我可以尝试和使用的示例脚本会很棒,因为我对 Keras 框架相对较新

非常感谢!

最佳答案

请检查这是否有用。使用 Keras 2.2.4 进行测试。

from keras.layers import Conv2D, MaxPooling2D, Input, Dense, Flatten, concatenate
from keras.models import Model
import numpy as np

img_input = Input(shape=(64, 64, 1)) ## branch 1 with image input
x = Conv2D(64, (3, 3))(img_input)
x = Conv2D(64, (3, 3))(x)
x = MaxPooling2D((2, 2))(x)
x = Flatten()(x)
out_a = Dense(64)(x)

num_input = Input(shape=(7,)) ## branch 2 with numerical input
x1 = Dense(8, activation='relu')(num_input)
out_b = Dense(16, activation='relu')(x1)

concatenated = concatenate([out_a, out_b]) ## concatenate the two branches
out = Dense(4, activation='softmax')(concatenated)
model = Model([img_input, num_input], out)
print(model.summary())
model.compile('sgd', 'categorical_crossentropy', ['accuracy'])

### Just for sanity check
X = [np.zeros((1,64,64,1)), np.zeros((1,7))]
y = np.ones((1,4))
model.fit(X, y)
print(model.predict(X))

您可以使用 Pandas 读取输入数据

from PIL import Image
import pandas as pd

def get_num_input():
df = pd.read_csv('num.csv')
columns = list(df.columns)
features = columns[:-1]
cls_name = columns[-1]
X = np.zeros((len(df), len(features)))
Y = list()
for i, row in df.iterrows():
X[i] = row[features]
Y.append(row[cls_name])

return (X, Y)

def get_img_input():
df = pd.read_csv('img.csv')
X_img = np.zeros((len(df), 28, 28)) # change as per image size
Y = list()
for i, row in df.iterrows():
X_img[i] = np.array(Image.open(row['image_url']))
Y.append(row['class'])

return (X_img, Y)


X_num, Y = get_num_input()
X_img, _ = get_img_input() # use one of the Ys
# X feature normalization, convert Y to one-hot representation

model.fit() 有一个'validation_split' 参数,可以将其设置为 0.3 以创建 70:30 的分割。 model.fit() 返回一个 History 对象,可用于绘制精度曲线,或者您可以使用 TensorBoard 回调进行实时跟踪。

https://chrisalbon.com/deep_learning/keras/visualize_loss_history/ https://keras.io/callbacks/#tensorboard

关于python - Keras 中两个并行但不同的数据集作为多个输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55080465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com