我想使用图像数据和速度数据来训练CNN驱动。我有游戏中的图像数据,我将数据调整为160x120,所以我有160x120x3数据(因为有3个RGB通道)。 仅使用图像数据,此任务就非常简单,但是如果我必须图像(第二张图像具有30x30x3的速度)或我有确切的编号(使用Tessaract将该30x30x3的图像转换为数字)怎么办? 我只能使用没有速度的图像数据,但这不是一个好的解决方案。我认为结果会很差。我真的很想使用速度数据,因为这是真正的自动驾驶汽车的工作方式。不幸的是,如果涉及到Tensorflow / Keras,那么我是个菜鸟(如果涉及到CNN,则不是),而且我不知道如何组合两个图像或图像和数字。
我有实现AlexNet的代码。
import numpy as np
import tensorflow as tf
from tensorflow.keras import Model
from tensorflow.keras.models import Sequential
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.losses import categorical_crossentropy
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Dropout
# AlexNet model
class AlexNet2(Sequential):
def __init__(self, input_shape, num_classes):
super().__init__()
self.add(Conv2D(96, kernel_size=(11, 11), strides=4,
padding='valid', activation='relu',
input_shape=input_shape,
kernel_initializer='he_normal'))
self.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2),
padding='valid', data_format=None))
self.add(Conv2D(256, kernel_size=(5, 5), strides=1,
padding='same', activation='relu',
kernel_initializer='he_normal'))
self.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2),
padding='valid', data_format=None))
self.add(Conv2D(384, kernel_size=(3, 3), strides=1,
padding='same', activation='relu',
kernel_initializer='he_normal'))
self.add(Conv2D(384, kernel_size=(3, 3), strides=1,
padding='same', activation='relu',
kernel_initializer='he_normal'))
self.add(Conv2D(256, kernel_size=(3, 3), strides=1,
padding='same', activation='relu',
kernel_initializer='he_normal'))
self.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2),
padding='valid', data_format=None))
self.add(Flatten())
self.add(Dense(4096, activation='relu'))
self.add(Dense(4096, activation='relu'))
self.add(Dense(1000, activation='relu'))
self.add(Dense(num_classes, activation='softmax'))
self.compile(optimizer=tf.keras.optimizers.Adam(0.001),
loss='categorical_crossentropy',
metrics=['accuracy'])
# model = AlexNet2((227, 227, 3), 9)
这是我的主要代码
train = train_data[:-100]
test = train_data[-100:]
X = np.array([i[0] for i in train]).reshape(-1, WIDTH, HEIGHT, 3)
Y = np.array([i[1] for i in train])
x_test = np.array([i[0] for i in test]).reshape(-1, WIDTH, HEIGHT, 3)
y_test = np.array([i[1] for i in test])
# TensorBoard settings
log_dir = "gitignore\\games\\Overspeed\\logs\\fit\\" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir)
callback_list = [tensorboard_callback]
# start training
model.fit(x=X,
y=Y,
epochs=1,
validation_data=(x_test, y_test),
callbacks=callback_list)
# save the whole model
model.save(MODEL_DIR)
我应该改变什么?也许我应该在某处添加一些图层?我曾考虑过增加速度(以图像或数字形式)以进行展平,但是我不确定这是否是一个好主意以及如何做到这一点。