Cre*_*nus 12 python machine-learning mnist deep-learning keras
如何训练模型识别一张图片中的五个数字.代码如下:
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dropout, Dense, Input
from keras.models import Model, Sequential
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
activation='relu',
input_shape=(28, 140, 1)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dropout(0.5))
Run Code Online (Sandbox Code Playgroud)
这里应该是一个用于识别图片中每个数字的循环,但我不知道如何实现它.
model.add(Dense(11, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
model.fit(X_train, y_train,
batch_size=1000,
epochs=8,
verbose=1,
validation_data=(X_valid, y_valid))
Run Code Online (Sandbox Code Playgroud)
组合mnist编号的图片如下:

由于您已经拥有一个表现良好的图像,因此您所要做的就是扩展模型中的类数量。
您可以使用 5 个 11 个类,而不是仅使用 11 个类。
前 11 类标识第一个数字,后面的 11 类标识第二个数字,依此类推。总共 55 个类,图像中每个位置 11 个类。
所以,简而言之:
(28,140)、 或(140,28),具体取决于您用于加载图像的方法。 (55,),告诉每个象限中有哪些数字。示例:对于第一个图像,使用 9,7,5,4,10,您将创建Y_training包含值 1 的以下位置:
Y_training[9] = 1 Y_training[18] = 1 #(18=7+11)Y_training[27] = 1 #(27=5+22)Y_training[37] = 1 #(37=4+33) Y_training[54] = 1 #(54=10+44) 按照您想要的方式创建模型层,与常规 MNIST 模型几乎相同,这意味着:无需尝试循环或类似的事情。
但它可能需要比以前大一点。
您将无法categorical_crossentropy再使用,因为每个图像将有 5 个正确的类,而不是只有 1 个。如果您最后使用“sigmoid”激活,binary_crossentropy应该是一个很好的替代品。
确保最后一层适合 55 元素向量,例如Dense(55)。
| 归档时间: |
|
| 查看次数: |
1098 次 |
| 最近记录: |