python - 如何结合数字数据和图像数据在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)结合起来进行训练?
解决方案
进入神经网络的数据必须具有同质格式;有时你不能给它一个整数,然后是一个图像。进入网络的数据的形状必须保持不变。在这里,您将形状设置为(3,)
,这是不正确的——这只是您传递的数组的长度。该shape
参数是指单个数据点的维度,例如,100x100 RGB 图像可能具有 shape (100,100,3)
。
因此,组合图像和整数数据的最简单方法是将整数附加到表示图像的平面数组中。这可能不会很好地工作,但至少会编译。
更好的方法是以整数不会被原始图像数据淹没的方式来构建它。也许这意味着通过卷积网络运行图像以获得特征向量,将相应的整数附加到它,然后将其馈送到另一个网络。但这取决于您要执行的操作的具体情况。
推荐阅读
- tcl - 如何从 tcl 中的当前脚本路径获取一个目录的路径?
- android - 为什么升级到 jetpack compose 1.0.0-beta01 后没有隐式导入 kotlin.collections?
- python - 正则表达式捕获每行引号内的第一个文本组
- c++ - Qt 创建者 Xbox One 控制器输入
- visual-studio - Visual Studio 在停靠窗口上崩溃
- python - 在同一轴上绘制 Matplotlib 中的两个图像
- vue.js - 客户端渲染的虚拟 DOM 树与服务器渲染的内容不匹配
- r - 如何结合两个因素使过滤更快?
- java - 如何通过外键找到数据集表中条目数量较少的行?
- qt - QTCreator 4.14.1 (Python) 中的错误:找不到匹配“ui_form.h”的文档