首页 > 解决方案 > 如何结合数字数据和图像数据在tensorflow中进行训练?

问题描述

所以,例如,我有这个代码:

import numpy as np
import cv2 as cv
import tensorflow as tf

data = [2.78,1.78]
y = [1]
img = cv.imread("path/to/image")
data.append(img)
data_array = np.array(data)
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(128, input_shape=(3,), activation='relu'),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(32, activation='relu'),
    tf.keras.layers.Dense(3, activation='softmax')
    ])

model.compile(loss='sparse_categoricalcrossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(data_array, y, epochs=100)

当我尝试运行此代码时,它会引发此错误

ValueError: Failed to find data adapter that can handle input: <class 'numpy.ndarray'>, (<class 'list'> containing values of types {"<class 'int'>"})

无论如何将这两个数据(数据和img)结合起来进行训练?

标签: pythontensorflow

解决方案


进入神经网络的数据必须具有同质格式;有时你不能给它一个整数,然后是一个图像。进入网络的数据的形状必须保持不变。在这里,您将形状设置为(3,),这是不正确的——这只是您传递的数组的长度。shape参数是指单个数据点的维度,例如,100x100 RGB 图像可能具有 shape (100,100,3)

因此,组合图像和整数数据的最简单方法是将整数附加到表示图像的平面数组中。这可能不会很好地工作,但至少会编译。

更好的方法是以整数不会被原始图像数据淹没的方式来构建它。也许这意味着通过卷积网络运行图像以获得特征向量,将相应的整数附加到它,然后将其馈送到另一个网络。但这取决于您要执行的操作的具体情况。


推荐阅读