【发布时间】:2020-05-24 22:55:40
【问题描述】:
我一直在为这个 CNN 工作。在 Test() 函数中,它总是说它是 1 个给定的数字。 (例如。总是输出 8 即使它甚至没有关闭)。我尝试更多地训练模型,看看模型是否不够好。这是我的代码:
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Dense, Conv2D, Dropout, MaxPooling2D
from tensorflow.keras.callbacks import TensorBoard
from tensorflow.keras.utils import to_categorical
from matplotlib import pyplot as plt
(Train_Data, Train_Labels), (Test_Data, Test_Labels) = tf.keras.datasets.mnist.load_data()
Train_Data = Train_Data.reshape(60000,28,28,1)
Test_Data = Test_Data.reshape(10000,28,28,1)
Train_Data = Train_Data / 255 - 0.5
Test_Data = Test_Data / 255 - 0.5
def load(name):
net = keras.models.load_model(name)
return net
def save(name):
model.save(name)
print("""
###:::SAVING MODEL:::###
""")
def makeCNN():
model = keras.Sequential()
model.add(Conv2D(32, kernel_size=3, activation='relu'))
model.add(MaxPooling2D(pool_size=(3,3)))
model.add(keras.layers.Flatten())
model.add(Dense(9, activation='relu'))
model.add(Dense(10, activation='softmax'))
model.compile(optimzer='adam', loss="mse", metrics=['accuracy'])
return model
def train(epochs):
for i in range(epochs):
print(i+1)
model.fit(Train_Data, Train_Labels)
save('CNN.h5')
def test():
validCorrect = 0
validTotal = 0
print(Test_Data.shape)
for i in range(1000):
data = Test_Data[i]
data = data.reshape(1,28,28,1)
prediction = model.predict(data)
validTotal +=1
if np.argmax(prediction) == Test_Labels[i]:
validCorrect+=1
print(f"""
TOTAL:{validTotal}
ACCURACY:{(validCorrect/validTotal)*100}
CORRECT:{validCorrect}
""")
print(f"GUESS:{np.argmax(prediction)}
REALITY{Test_Labels[i]}")
model = makeCNN()
train(80)
test()
感谢任何帮助。谢谢!我对机器学习很陌生(尤其是 CNN)
【问题讨论】:
标签: python keras neural-network conv-neural-network