基于随机森林+RNN+Tensorflow-Magenta的根据图片情感智能生成音乐系统——深度学习算法应用(含python、ipynb工程源码)+所有数据集(三)

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
  • 模块实现
    • 1. 数据预处理
      • (1)图片部分
      • (2)音乐部分
    • 2. 模型构建
    • 3. 模型训练及保存
      • (1)图片情感分析
        • 1)模型训练
        • 2)模型保存
      • (2)音乐训练
        • 1)模型训练
        • 2)模型保存
  • 相关其它博客
  • 工程源代码下载
  • 其它资料下载


基于随机森林+RNN+Tensorflow-Magenta的根据图片情感智能生成音乐系统——深度学习算法应用(含python、ipynb工程源码)+所有数据集(三)_第1张图片

前言

本项目基于Google的Magenta平台,它采用随机森林分类器来识别图片的情感色彩,接着项目使用递归神经网络(RNN)来生成与图片情感相匹配的音乐,最后通过图形用户界面(GUI)实现可视化结果展示。

首先,项目处理图片,使用随机森林分类器来确定图片中的情感色彩。这可以包括情感分类,如欢快、宁静等。该分类器会分析图片的视觉特征,以确定其中蕴含的情感。

随后,根据图片中的情感,项目使用递归神经网络(RNN)生成与情感相匹配的音乐。这个过程涉及到选定特定音符、节奏和和声,以创造出与图片情感相一致的音乐作品。

最后,项目通过图形用户界面(GUI)将图片、情感色彩、生成的音乐等结果以可视化方式呈现给用户。

总之,这个项目结合了计算机视觉、音乐生成和图形用户界面设计,旨在将图片的情感色彩与音乐创作相融合,为用户提供一种独特的艺术体验。这对于艺术和技术的交叉应用可能非常引人注目。

总体设计

本部分包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。

基于随机森林+RNN+Tensorflow-Magenta的根据图片情感智能生成音乐系统——深度学习算法应用(含python、ipynb工程源码)+所有数据集(三)_第2张图片

系统流程图

系统流程如图所示。

基于随机森林+RNN+Tensorflow-Magenta的根据图片情感智能生成音乐系统——深度学习算法应用(含python、ipynb工程源码)+所有数据集(三)_第3张图片

运行环境

本部分包括 Python 环境和Magenta环境。

详见博客。

模块实现

本项目包括3个模块:数据预处理、模型构建、模型训练及保存,下面分别给出各模块的功能介绍及相关代码。

1. 数据预处理

MIDI下载地址为http://midi.midicn.com/,图片在花瓣网收集获取地址为https://huaban.com/boards/60930738/。音乐模型包含欢快和安静两类MIDI文件各100个,图片包含欢快和安静两类各250张,格式为.jpg。另外,数据集也可以从本博客对应工程源码中下载。

(1)图片部分

提取图片中占比前十的色彩信息,将其转换成hsv格式,存储到.csv文件中,便于后续使用。

详见博客。

(2)音乐部分

详见博客。

2. 模型构建

数据加载进模型之后,定义模型结构,并优化损失函数。

详见博客。

3. 模型训练及保存

在定义模型架构和编译之后,使用训练集训练模型,使模型对图片的情感进行分类。

(1)图片情感分析

本部分包括模型训练和模型保存。

1)模型训练
def load_dataset(filename): #加载数据集
    file_reader = csv.reader(open(filename, 'rt'), delimiter=',')
    X, y = [], []
    for row in file_reader:
        X.append(row[0:15]) #获取前15维数据
        y.append(row[-1]) #获取标签
    #提取特征名称
    feature_names = np.array(X[0])
    return	np.array(X[1:]).astype(np.float32), np.array(y[1:]).astype(np.float32), feature_names
if __name__ == '__main__':
    X,y,feature_names = load_dataset('E:/college/synaes/image_csv/0411.csv')
    X, y = shuffle(X, y, random_state=7) #打乱数据
    num_training = int(0.9 * len(X)) #数据的90%作为训练集
    X_train, y_train = X[:num_training], y[:num_training]
    X_test, y_test = X[num_training:], y[num_training:]
    rf_clf = RandomForestClassifier(n_estimators=1000, max_depth=10, min_samples_split=2) #设置随机森林分类器的参数、决策树的数量、树的深度、最小划分
    rf_clf.fit(X_train, y_train)
    y_pred = rf_clf.predict(X_test)
        print('accuracy:',sklearn.metrics.accuracy_score(y_test, y_pred))
2)模型保存

利用joblib库将模型保存为.m格式的文件。

joblib.dump(rf_clf, "E:/college/synaes/image/classifier.m")

模型被保存后,可以被重用,也可以移植到其他环境中使用。

(2)音乐训练

本部分包括模型训练和模型保存的相关代码。

1)模型训练

相关代码如下:

FLAGS = tf.app.flags.FLAGS
tf.app.flags.DEFINE_string('run_dir', 'E:/college/synaes/poly_rnn/train_model/quiet',
              'Path to the directory where checkpoints and '
              'summary events will be saved during training and '
              'evaluation. Separate subdirectories for training '
              'events and eval events will be created within '
              '`run_dir`. Multiple runs can be stored within the '
              'parent directory of `run_dir`. Point TensorBoard '
              'to the parent directory of `run_dir` to see all '
              'your runs.')
#检查点的保存路径、保存训练和测试过程中的事件,可以通过TensorBoard查看运行状况
tf.app.flags.DEFINE_string('config', 'polyphony', 'The config to use')
#选择要用的配置
tf.app.flags.DEFINE_string('sequence_example_file', 'E:/college/synaes/poly_rnn/datasets/quiet'
                          '/training_poly_tracks.tfrecord',
              'Path to TFRecord file containing '
#保存有序列示例的TFrecord文件
                           'tf.SequenceExample records for training or '
                           'evaluation.')
tf.app.flags.DEFINE_integer('num_training_steps', 0,
       'The the number of global training steps your '
#训练步数,0是一直训练直到手动中止
                            'model should take before exiting training. '
                            'Leave as 0 to run until terminated manually.')
tf.app.flags.DEFINE_integer('num_eval_examples', 0,
                            'The number of evaluation examples your model '
   'should process for each evaluation step.'
#每次评估用到的训练样本数,0用整个测试样本
                            'Leave as 0 to use the entire evaluation set.')
tf.app.flags.DEFINE_integer('summary_frequency', 10,
                            'A summary statement will be logged every '
                            '`summary_frequency`'
                            ' steps during training or '
                            'every `summary_frequency` seconds during '
                            'evaluation.')
tf.app.flags.DEFINE_integer('num_checkpoints', 10,
                         'The number of most recent checkpoints to keep in '
  'the training directory. Keeps all if 0.')
#保存训练目录里最近的检查点数量
tf.app.flags.DEFINE_boolean('eval', False,
                            'If True, this process only evaluates the model '
  'and does not update weights.')
#如果是True,仅进行测试,不改变模型
tf.app.flags.DEFINE_string('log', 'INFO',
                           'The threshold for what messages will be logged '
                           'DEBUG, INFO, WARN, ERROR, or FATAL.')#容错
tf.app.flags.DEFINE_string(
'hparams', 'batch_size=64,rnn_layer_sizes=[64,64]',
'Comma-separated list of `name=value` pairs.For each pair, the value of '
'the hyperparameter named `name` is set to `value`. This mapping is merged '
    'with the default hyperparameters.')#指定batch的大小和RNN层的大小
#主函数
def main(unused_argv):
  tf.logging.set_verbosity(FLAGS.log)
  #报错提示
  if not FLAGS.run_dir:
    tf.logging.fatal('--run_dir required')
    return
  if not FLAGS.sequence_example_file:
    tf.logging.fatal('--sequence_example_file required')
    return
  #打开序列示例
  sequence_example_file_paths = tf.gfile.Glob(
      os.path.expanduser(FLAGS.sequence_example_file))
  run_dir = os.path.expanduser(FLAGS.run_dir) #保存训练事件
  #配置复调音乐模型
  config = polyphony_model.default_configs[FLAGS.config]
  config.hparams.parse(FLAGS.hparams)
  mode = 'eval' if FLAGS.eval else 'train'
  build_graph_fn = events_rnn_graph.get_build_graph_fn(
      mode, config, sequence_example_file_paths)
  #训练模型
  train_dir = os.path.join(run_dir, 'train')
  tf.gfile.MakeDirs(train_dir)
  tf.logging.info('Train dir: %s', train_dir)
  if FLAGS.eval: #是否测试,若为True仅进行测试,不改变模型
    eval_dir = os.path.join(run_dir, 'eval')
    tf.gfile.MakeDirs(eval_dir)
    tf.logging.info('Eval dir: %s', eval_dir)
    num_batches = (
        (FLAGS.num_eval_examples or
         magenta.common.count_records(sequence_example_file_paths)) //
         config.hparams.batch_size)
    events_rnn_train.run_eval(build_graph_fn, train_dir, eval_dir, num_batches)
  else: #若为False 则直接训练模型
    events_rnn_train.run_training(build_graph_fn, train_dir,
    FLAGS.num_training_steps,
    FLAGS.summary_frequency,
  checkpoints_to_keep=FLAGS.num_checkpoints)
#配置训练模型各项参数(训练步数,保存训练目录里最近的检查点数量,训练样本数等)
#运行主函数
def console_entry_point():
  tf.app.run(main)
2)模型保存
tf.app.flags.DEFINE_string('run_dir', 'E:/college/synaes/poly_rnn/train_model/quiet',
                         'Path to the directory where checkpoints and '
                         'summary events will be saved during training and '
                         'evaluation. Separate subdirectories for training '
                         'events and eval events will be created within '
                        '`run_dir`. Multiple runs can be stored within the '
                         'parent directory of `run_dir`. Point TensorBoard '
                          'to the parent directory of `run_dir` to see all '
                           'your runs.')
#检查点保存路径、保存训练和测试过程中的事件,可以通过TensorBoard查看运行状况
run_dir = os.path.expanduser(FLAGS.run_dir) #保存训练事件

相关其它博客

基于随机森林+RNN+Tensorflow-Magenta的根据图片情感智能生成音乐系统——深度学习算法应用(含python、ipynb工程源码)+所有数据集(一)

基于随机森林+RNN+Tensorflow-Magenta的根据图片情感智能生成音乐系统——深度学习算法应用(含python、ipynb工程源码)+所有数据集(二)

基于随机森林+RNN+Tensorflow-Magenta的根据图片情感智能生成音乐系统——深度学习算法应用(含python、ipynb工程源码)+所有数据集(四)

工程源代码下载

详见本人博客资源下载页


其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

你可能感兴趣的:(深度学习,图像识别,学习路线,1024程序员节,机器学习,人工智能,python,深度学习,随机森林,tensorflow)