app.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import pandas as pd
  2. import numpy
  3. import tensorflow as tf
  4. from tensorflow.keras import datasets, layers, models
  5. import math
  6. import time
  7. import tkinter
  8. from matplotlib import pyplot as plt
  9. df = pd.read_csv('train.csv')
  10. df = df.sample(frac=1)
  11. df_label = df['label']
  12. del df['label']
  13. X = df.to_numpy()
  14. y = df_label.to_numpy()
  15. X = X.reshape((-1, 28, 28, 1))
  16. X_train_size = math.floor(len(X)*.8)
  17. X_test_size = len(X) - X_train_size
  18. X_train = X[:X_train_size]
  19. X_test = X[X_test_size+1:]
  20. y_train = y[:X_train_size]
  21. y_test = y[X_test_size+1:]
  22. y_train = numpy.eye(10)[y_train]
  23. y_test = numpy.eye(10)[y_test]
  24. X_train = X_train/255
  25. X_test = X_test/255
  26. print(X_train[0])
  27. model = models.Sequential()
  28. model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
  29. model.add(layers.MaxPooling2D((2, 2)))
  30. model.add(layers.Conv2D(64, (3, 3), activation='relu'))
  31. model.add(layers.MaxPooling2D((2, 2)))
  32. model.add(layers.Conv2D(128, (3, 3), activation='relu'))
  33. model.add(layers.Flatten())
  34. model.add(layers.Dense(64, activation='relu'))
  35. model.add(layers.Dense(10, activation='softmax'))
  36. optmizer = tf.keras.optimizers.Adam(learning_rate=0.001)
  37. model.compile(optimizer=optmizer, loss=tf.keras.losses.MeanSquaredError(),
  38. metrics=['accuracy'])
  39. history = model.fit(X_train, y_train, batch_size=2**12, epochs=30, validation_data=(X_test, y_test))
  40. pred = model.predict(X_test)
  41. #print(numpy.argmax(pred[255]))
  42. #plt.imshow(X_test[255].reshape(28,28))
  43. #plt.show()
  44. df = pd.read_csv('test.csv')
  45. X = df.to_numpy()
  46. y = model.predict(X.reshape(-1,28,28,1))
  47. with open('submission.csv', 'w') as f:
  48. f.write("ImageId,Label\n")
  49. idx=1
  50. for i in y:
  51. f.write(f"{idx},{numpy.argmax(i)}\n")
  52. idx+=1